链表的查找
来源:互联网 发布: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
- 链表的查找
- 查找----线性表的查找
- 双向链表的查找
- 链表的特殊查找
- 链表的增删查找
- 双向链表的查找
- 算法-查找-线性表的查找(顺序查找,二分查找,分块查找)
- 查找技术---线性表查找技术的顺序表查找
- 【数据结构-查找】有序表的查找-折半查找
- 折半查找:有序表的查找
- 有序表的查找(折半查找)
- 线性表的查找-顺序查找
- 线性表的查找-二分查找
- 线性表的查找-分块查找
- 有序表的查找(折半查找)
- 查找——线性表的查找
- 查找——树表的查找
- 查找一 线性表的查找
- 一步一步开发安卓应用 Android 启动界面的制作
- c++第一次实验-2
- Kafka学习(一):Kafka背景及架构介绍
- RawText "123" must be wrapped in an explicit <Text> component
- 13.内存位宽及编址寻址
- 链表的查找
- CSS初步(结合的4种方式)
- Java Web应用调优线程池
- Android进阶UI之SwipeListView左滑删除例子
- linux中的glibc库与STL库
- 查看java class version .cmd
- ORACLE11g 实例启动报错 ORA-00205: error in identifying control file, check alert log for more info
- 欢迎使用CSDN-markdown编辑器
- 【HDU】 5532 Almost Sorted Array