标签:倒数第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个结点 倒数k结点 倒数k java单链表 java数据结构
原文地址:http://blog.csdn.net/lavor_zl/article/details/42805769