题目
寻找链表中倒数第k个结点
此题比较简单,代码如下
/*
思路:假设链表的结点数为N,当k<=N时,寻找链表的倒数第K个结点就是寻找链表的第N-k个结点。
*/
#include<stdio.h>
#include<stdlib.h>
struct ListNode{
int data;
struct ListNode* pNext;
};
//建立一个链表,当输入为-1时就停止
void createList(ListNode **pHead){
*pHead=(ListNode *)malloc(sizeof(ListNode));
if(*pHead==NULL){
exit(EXIT_FAILURE);
}
int data;
scanf("%d",&data);
if(data!=-1){
(*pHead)->data=data;
(*pHead)->pNext=NULL;
createList(&((*pHead)->pNext));
}
return ;
}
ListNode* findNodeInListOfK(ListNode *pHead,int n,int k){
if(pHead!=NULL&&k>0&&n>=k){
int len=n-k;
ListNode *cur=pHead;
while(len-->0){
cur=cur->pNext;
}
return cur;
}
}
int main(void){
int n,k;
while(scanf("%d%d",&n,&k)!=EOF&&n>0&&k>0&&k<=n){
//第一步,创建链表。
ListNode *pHead=NULL;
createList(&pHead);
//第二步:找到倒数第k个结点,返回的就是倒数第k个结点的指针。
ListNode *node=findNodeInListOfK(pHead,n,k);
printf("%d\n",node->data);
}
return 0;
}