题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:
struct ListNode { int m_nKey; ListNode* m_pNext; };
题目不难,能快速想到解决的方法就是定义两个指针,第一个比第二个快k-1个节点。这样,当第一个到达尾节点时,第二个刚好停留在倒数第k个节点上。
实现起来的话,就是先让第一个先next k-1个,然后两个再同步next。OK
ListNode* PrintNext_K(ListNode* L,int k){ if(!L||k<0) return ; int i = 0; ListNode* p1 = L; ListNode* p2 = L; while((i < k)&& p1) p1 = p1->next; if(!p1) return ; while(p1){ p1 = p1->next; p2 = p2->next; } return p2; }