链表的查找

来源:互联网 发布:js拖拽与放大 编辑:程序博客网 时间:2024/06/03 17:34

对于数据结构,一直都没有怎么用,但是在面试时一直都会出现。


面试题- 链表

(1)写一个函数将一个链表逆序.

(2)一个单链表,不知道长度,写一个函数快速找到中间节点的位置.

(3)写一个函数找出一个单向链表的倒数第n个节点的指针.(把能想到的最好算法写出).


#include "stdafx.h"#include <iostream>#include <math.h>using namespace std;struct MyStruct{int data;MyStruct *pNext;};MyStruct* CreateList(int* p, int len);MyStruct* PositiveList(MyStruct* pHead);MyStruct* FindMidNode(MyStruct* pHead);MyStruct* FindEndIndex(MyStruct* pHead,int nNode);int main(){int a[8] = {1,2,3,4,5,6,7,8};MyStruct *pHead = NULL;//创建链表时就让它逆序pHead = CreateList(a, 8);//逆序输出 5-1MyStruct *pPriData= pHead;while(pPriData != NULL){cout<<"value: "<<pPriData->data<<endl;pPriData = pPriData->pNext;}//正序输出1-5cout<<endl;cout<<"正序输出"<<endl;MyStruct *pData = PositiveList(pHead);pPriData = pData;while (pPriData != NULL){cout<<"value: "<<pPriData->data<<endl;pPriData = pPriData->pNext;}//查找中间的节点pPriData = FindMidNode(pHead);cout<<"位置为: "<<&pPriData<<"数据为:"<<pPriData->data<<endl;//查找倒数的节点的数据int nNode;cout<<"输入要查看的节点"<<endl;cin >>nNode;pPriData = FindEndIndex(pHead,nNode);system("pause");return 1;}MyStruct* FindEndIndex(MyStruct* pHead,int nNode){//先让pEnd - pBegin = nNode(他们之家的差距)MyStruct* pBegin = pHead;MyStruct* pEnd = pHead;//如果是1就是最后一个节点if(nNode == 1){while(pBegin->pNext != NULL){pBegin = pBegin->pNext;}return pBegin;}else{for(int i =0; i< nNode-1; i++){pEnd= pEnd->pNext;}while(pEnd->pNext != NULL){pEnd = pEnd->pNext;pBegin = pBegin->pNext;}return pBegin;}}MyStruct* FindMidNode(MyStruct* pHead){MyStruct* pSercher = pHead;MyStruct* pMid     = pHead;while(pSercher->pNext != NULL){pSercher = pSercher->pNext->pNext;if(pSercher == NULL){break;}pMid = pMid->pNext;}return pMid;}MyStruct* PositiveList(MyStruct* pHead){MyStruct *pReturn = NULL;MyStruct *pData = NULL;while(pHead != NULL){MyStruct *pTemp = new MyStruct;pTemp->data = pHead->data;pTemp->pNext = NULL;if(pReturn == NULL){pReturn = pTemp;}else{pTemp->pNext = pReturn;pReturn = pTemp;}pHead = pHead->pNext;}return pReturn;}MyStruct* CreateList(int* p,int len){MyStruct *pHead = NULL;MyStruct *pTemp = NULL;for(int i =0; i < len; i++){pTemp = new MyStruct;pTemp->data = i;pTemp->pNext = NULL;if(pHead == NULL){pHead = pTemp;}else{ pTemp->pNext = pHead;pHead= pTemp;}}return pHead;}

我在自己的电脑上验证通过了,如果感觉思路不好,请给我留言。您的留言是我前进的动力!


0 0
原创粉丝点击