程序员面试题目总结--链表(2)【找出单链表中的倒数第K个元素】

来源:互联网 发布:扒一扒淘宝上的化妆刷 编辑:程序博客网 时间:2024/05/21 00:56

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;}


0 0
原创粉丝点击