题目:输入一个链表 输出该链表中倒数第K个结点 从1开始计数 即链表的尾结点是倒数第1个结点 如一个链表有6个结点
从头结点开始他们的值一次为1 2 3 4 5 6 这个链表的倒数第3个结点值为4
链表结点定义如下:
struct ListNode
{
int m_nValue;
ListNode *m_pNext;
};
----------------------------------------
#include <iostream>
using namespace std;
struct ListNode
{
int m_nValue;
ListNode *m_pNext;
};
ListNode *creatlist(int n)
{
ListNode *p=(ListNode *)malloc(sizeof(ListNode));
ListNode *s=p;
int temp=0;
if(n==0)
{
p=NULL;
return p;
}
cout<<"输入第"<<0<<"个结点:";
cin>>temp;
p->m_nValue=temp;
p->m_pNext=NULL;
for(int i=1;i<n;i++)
{
ListNode *t=(ListNode *)malloc(sizeof(ListNode));
cout<<"输入第"<<i<<"个结点:";
cin>>temp;
t->m_nValue=temp;
t->m_pNext=NULL;
p->m_pNext=t;
p=t;
}
p->m_pNext=NULL;
return s;
}
int finds(ListNode *s,int k)
{
ListNode *p1=s;
ListNode *p2=s;
if(k<=0)
return -1;
while(k)
{
if(p1==NULL)
return -1;//查找错误~~~~
p1=p1->m_pNext;
k--;
}
while(p1)
{
p1=p1->m_pNext;
p2=p2->m_pNext;
}
return (p2->m_nValue);
}
int main()
{
int n;
cout<<"输入链表结点个数:";
cin>>n;
ListNode *head=creatlist(n);
int k=0;
cout<<"输入要查找的倒数第K个结点:";
cin>>k;
cout<<finds(head,k)<<endl;
return 0;
}