解题思路:设置两个指针,将第一个指针指向链表的头结点,第二个指针保持不动,先让第一个指针走到第k个节点处,此时将第二个节点从链表的头结点开始走,当第一个指针走到链表的NULL位置时,第二个指针的位置就是倒数第K个节点的位置。
代码:
# include<iostream>
using namespace std;
struct ListNode
{
int key;
ListNode *next;
ListNode():next(NULL),key(0){}
};
ListNode *FindNode(ListNode *head,int key)
{
if(head == NULL || key == 0)
{
return NULL;
}
ListNode *p=head;
ListNode *q=head;
for(size_t i=0;i<key;i++)
{
if(p)
{
p = p->next;
}
else
{
return NULL;
}
}
while(p)
{
p=p->next;
q=q->next;
}
return q;
}
int main()
{
ListNode *l1=new ListNode();
ListNode *l2=new ListNode();
ListNode *l3=new ListNode();
ListNode *l4=new ListNode();
ListNode *l5=new ListNode();
ListNode *l6=new ListNode();
ListNode *l7=new ListNode();
l1->next=l2;
l2->next=l3;
l3->next=l4;
l4->next=l5;
l5->next=l6;
l6->next=l7;
l1->key=1;
l2->key=5;
l3->key=86;
l4->key=16;
l5->key=34;
l6->key=94;
l7->key=100;
int key;
cin>>key;
ListNode *tmp=FindNode(l1,key);
cout<<tmp->key<<endl;
return 0;
}