【问题】输入一个链表,输出该链表中倒数第k个结点。
【思路】如果使用常规思维,那么我们需要遍历一次链表,然后再返回倒数第K个结点。如果K为节点长度的话,就需要遍历两次节点了,显然这种方法是不可取的!因此我们可以使用两个指针(前指针和后指针),前指针先移动k个节点,然后两者再一起移动,则后指针指向的节点为所求节点!
1/* 2struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8};*/ 9class Solution { 10public: 11 ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { 12 if(pListHead == nullptr||k==0) 13 return nullptr; 14 ListNode*pTail=pListHead,*pHead=pListHead; 15 for(int i = 1;i < k;++i) 16 { 17 if(pHead->next!=nullptr) 18 pHead=pHead->next; 19 else 20 return nullptr; 21 } 22 while(pHead->next!=nullptr) 23 { 24 pHead=pHead->next; 25 pTail=pTail->next; 26 } 27 return pTail; 28 } 29};