输入一个链表,输出该链表中倒数第k个结点。
分析:
定义两个结点p1和p2都指向头节点,p1先走k-1步,然后p1和p2一起走,当p1走到链表尾部时,p2指向的结点就是倒数第k个结点
遍历一遍链表即可,时间复杂度O(N)
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead==NULL||k==0) return NULL; ListNode *p1,*p2; p1=pListHead; p2=pListHead; //先走k-1步 int x=k-1; while(x&&p1!=NULL) { p1=p1->next; x--; } if(p1==NULL) return NULL; //一起走,当p1走到末尾时,p2指向的结点就是倒数第k个结点 while(p1->next!=NULL) { p2=p2->next; p1=p1->next; } return p2; }