码迷,mamicode.com
首页 > 编程语言 > 详细

输出单链表中倒数第k个结点(Java版)

时间:2015-01-17 18:10:44      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:倒数第k个结点   倒数k结点   倒数k   java单链表   java数据结构   

题目:输入带头结点的单链表L,输出该单链表中倒数第k个结点。单链表的倒数第0个结点为该单链表的尾指针。要求只能遍历一次单链表。


解题思路:
如果不要求只能遍历一次单链表,我们可以先遍历一次单链表,求出它的结点的总个数n(包括头结点),所以单链表的结点是从倒数第n-1个到倒数第0个,然后再遍历一次单链表,遍历时访问的第n-k-1个结点就是该单链表中倒数第k个结点。现在要求只能遍历一次单链表,可以设两个指针p和q,最开始时它们都指向头结点,然后p向后移动k位,最后p,q同时向后移动直到p为最后一个结点,那么此时q即为所求。


ADT定义:

//单链表的结点类
class LNode{
	//为了简化访问单链表,结点中的数据项的访问权限都设为public
	public int data;
	public LNode next;
}

算法实现:

public class LinkListUtli {
	//求单链表倒数第k个结点,尾指针为倒数第0个结点
	public LNode reciprocalKNode(LNode L, int k) {
		if (k < 0) {
			System.out.println("k不可以为负数");
			return null;
		}
		if (L == null) {
			System.out.println("单链表为空");
			return null;
		}
		LNode p = L;
		LNode q = L;
		while (k > 0) {
			p = p.next;
			if (p == null) {
				System.out.println("单链表太短,不存在倒数第k个结点");
				return null;
			}
		}
		while (p.next != null) {
			p = p.next;
			q = q.next;
		}
		return p;
	}


输出单链表中倒数第k个结点(Java版)

标签:倒数第k个结点   倒数k结点   倒数k   java单链表   java数据结构   

原文地址:http://blog.csdn.net/lavor_zl/article/details/42805769

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!