求链表中倒数第k个节点
思路
- 用两个指针,第一个指针先走k-1步
- 然后两个指针一起走。当第一个指针走到尾节点的时候,第二个指针指向的就是倒数第k个节点。
注意事项:
typedef struct
{
ElemType data;
struct ListNode *next;
} ListNode, *LinkList;
ListNode *FindK(ListNode *pHead, unsigned int k)
{
if (pHead == null || k = 0)
return null;
ListNode *p1 = pHead;
ListNode *p2 = pHead;
ListNode *q = pHead;
int number = 1;
while(q->next != null)
{
++number;
q = q->next;
}
if (number < k)
{
printf("链表长度应大于等于k,请重新输入\n");
return null;
}
for (unsigned int i = 0; i < k - 1 ; ++i)
p1 = p1->next;
while(p1->next != null)
{
p1 = p1->next;
p2 = p2->next;
}
return p2;
}