题目描述
输入一个链表,输出该链表中倒数第k个结点。
C++实现:
先计算链表中有多少个结点,总数记为count
那么倒数第k个结点即顺数第count-k+1个结点
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { ListNode * p = pListHead; int count = 0; while(p){ count++; p = p->next; } ListNode * q = {}; if(k>count) return q; else{ q = pListHead; int i = 1; while(i){ if(i == count-k+1){ return q; } q = q->next; i++; } } } };
缺点:需要遍历两次链表
讨论里面其他人的思想:
//p指针先跑,并且记录节点数,当p指针跑了k-1个节点后,pre指针开始跑,
//当p指针跑到最后时,pre所指指针就是倒数第k个节点
用java语言实现该思想:
public class Solution { public ListNode FindKthToTail(ListNode head,int k) { ListNode p = head; ListNode q = head; int count = 0; while(p!=null){ count++; if(count > k) q = q.next; p = p.next; } return count>=k?q:null; } }