【笔试面试——24】链表04——反转链表
2014-08-07 14:13
169 查看
笔试面试24——链表04反转链表:
![](http://img.blog.csdn.net/20140807141008477?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbXV5aW1v/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
题目分析:设置三个指针,一个指向节点,一个指向前,一个指向下一个。为了防止反转后,下一节点和链表断开。
反转后,把前指针和节点指针向后移一个。
题目分析:设置三个指针,一个指向节点,一个指向前,一个指向下一个。为了防止反转后,下一节点和链表断开。
反转后,把前指针和节点指针向后移一个。
#include<iostream> using namespace std; struct ListNode{ int data; ListNode* pNext; }; //创建链表 void CreatList(ListNode* &pHead,int data) { ListNode* pNewNode = new ListNode();//新建存放数据的节点 pNewNode->pNext = NULL; pNewNode->data = data; if(NULL == pHead) { pHead = pNewNode; } else { ListNode* pNode = pHead;//新建遍历节点 while(pNode->pNext != NULL) pNode = pNode->pNext; pNode->pNext = pNewNode; } } ListNode* ReverseList(ListNode *pHead) { ListNode* pAhead = NULL;//定义前节点 ListNode* pNode = pHead;//定义节点 ListNode* pReHead = NULL;//定义反转后的头结点 while(pNode != NULL)//如果节点不为空 { ListNode* pNext = pNode->pNext;//定义后节点保存信息,防止反转后,后边的断开 if(pNext == NULL)//是最后一个节点 pReHead = pNode; pNode->pNext = pAhead;//反转,节点指向前节点 pAhead = pNode;//指针移动,前节点移到节点 pNode = pNext;//指针移动遍历,节点指向下一个节点 } return pReHead; } void PrintList(ListNode* &pHead) { if(pHead == NULL) cout << "链表为空!"<< endl; else { ListNode* pNode = pHead; while(pNode != NULL) { cout << pNode->data << " "; pNode = pNode->pNext; } } cout << endl; } int _tmain(int argc, _TCHAR* argv[]) { int num = 0; ListNode* pHead = NULL; cout << "请输入链表:" << endl; while(cin >> num) { CreatList(pHead,num); } cout << "反转前的链表:" << endl; PrintList(pHead); cout << "反转后的链表:" << endl; ListNode* pReversedHead = ReverseList(pHead); PrintList(pReversedHead); system("pause"); return 0; }
相关文章推荐
- <笔试><面试>C/C++单链表相关(4)判断两链表是否相交,求交点(链表不带环/可能带环)
- 数据结构与算法分析笔记与总结(java实现)--链表问题面试笔试注意点
- 【笔试面试——26】链表06——复杂链表的复制
- 链表面试笔试题目总结
- 面试经典(24)--二叉搜索树和双向链表
- Web前端开发笔试&面试_04_20161019MTBS
- 面试笔试系列之二 链表相关
- <笔试><面试>单链表相关(1)从尾到头打印链表、删除一个无头链表的非尾结点
- [互联网面试笔试汇总C/C++-24] Linux守护进程工作原理和方式-雅虎
- 单链表相关面试笔试题
- 笔试面试,单链表相关(3)遍历一次找中间结点、倒数第K个结点
- 笔试面试单链表相关(2)在任意位置前插入结点、逆置链表
- 【笔试面试——27】链表07——两个链表的第一个公共节点
- 笔试面试单链表相关(2)在任意位置前插入结点、逆置链表
- [互联网面试笔试汇总C/C++-7] 寻找两个链表的第一个交点-微策略
- 笔试面试,单链表相关(3)遍历一次找中间结点、倒数第K个结点
- 【笔试面试】链表相关操作
- 【笔试面试——31】链表11——检测两个链表是否相交
- <笔试><面试>单链表相关(1)从尾到头打印链表、删除一个无头链表的非尾结点
- 【IOS笔试面试】04-Foundation