2、找出单链表中的倒数第K个元素
题目:找出单链表中的倒数第K个元素
分析: 只需遍历一次就能找到倒数第K个元素,设置两个指针,让其中一个指针比另一个指针先前移K步,然后两个指针同时往前移动,循环直到先行的指针值为NULL时,另一个指针所指的位置就是所要找的位置
#include<iostream>
using namespace std;
typedef struct node
{
int data;
node *next;
}linklist;
linklist *head=NULL;
//创建长度为len的链表
linklist* CreateList(int* arr,int len)
{
int data;
linklist* pCur,* pRear;
head=(linklist*)malloc(sizeof(linklist));
pRear=head;
int count=0;
while(count<len)
{
pCur=(linklist*)malloc(sizeof(linklist));
pCur->data=arr[count];
pRear->next=pCur;
pRear=pCur;
count++;
}
pRear->next=NULL;
return head;
}
//显示链表
void ShowList(linklist* p)
{
while(p)
{
cout<<p->data <<' ';
p=p->next;
}
cout << endl;
}
/********************找出单链表中的倒数第K个元素*******************************/
/* 只需遍历一次就能找到倒数第K个元素,设置两个指针,让其中一个指针比另一个指针
* 先前移K步,然后两个指针同时往前移动,循环直到先行的指针值为NULL时,另一个指针
* 所指的位置就是所要找的位置
/************************************************************************/
linklist* FindElem(linklist* p,int k)
{
linklist* ptr1=p;
linklist* ptr2=p;
for(int i=0;i<k;i++)
ptr1=ptr1->next;
while(ptr1!=NULL)
{
ptr1=ptr1->next;
ptr2=ptr2->next;
}
return ptr2;
}
int main()
{
int a[]={3,4,5,1,2,-1,7};
CreateList(a,sizeof(a)/sizeof(a[0]));
ShowList(head->next);
cout<<FindElem(head,4)->data << endl;
return 0;
}