链表中倒数第K个结点

来源:互联网 发布:图片文字制作软件 编辑:程序博客网 时间:2024/06/05 18:00

题目:输入一个链表 输出该链表中倒数第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;}


0 0
原创粉丝点击