算法学习之旅,初级篇(27)-–逆转一个链表
来源:互联网 发布:乐福数据 编辑:程序博客网 时间:2024/06/06 18:09
介绍
定义一个函数,输入一个链表的头结点,反转该链表并输出反转链表的头结点。
分析
如果要反转链表,就要把next指针指向prev指针。所以移动时,需要保存next,prev以及当前的链表指针。
代码
#include<stdio.h>#include<iostream>#include<stdlib.h>using namespace std;typedef struct ListNode{ int value; ListNode *next;}ListNode;//逆转链表ListNode* ReverseList(ListNode* pHead){ ListNode* pReverseList=NULL; //当前节点 ListNode* pNode=pHead; //前一个节点 ListNode* pPrev=NULL; //下一个节点 ListNode* pNext=NULL; while(pNode!=NULL) { pNext=pNode->next; //翻转next pNode->next=pPrev; //向后移动 pPrev=pNode; pNode=pNext; } return pPrev;}int main(){ ListNode* m_a =(ListNode*)malloc(sizeof(ListNode)); m_a->value=10; m_a->next=NULL; ListNode* a1=m_a; for(int i=10;i<15;i++) { ListNode* b=(ListNode*)malloc(sizeof(ListNode)); b->value=i*2; b->next=NULL; a1->next=b; a1=b; } a1=m_a; while(a1!=NULL) { cout<<a1->value<<" "; a1=a1->next; } cout<<endl; ListNode* k=ReverseList(m_a); while(k!=NULL) { cout<<k->value<<" "; k=k->next; } system("pause"); return 0;}
遇到的问题
注意指针移动。和指针的改变顺序。
阅读全文
0 0
- 算法学习之旅,初级篇(27)-–逆转一个链表
- 算法学习之旅,初级篇(23)–合并两个有序链表
- 算法学习之旅,初级篇(28)-–从尾到头打印链表
- 链表逆转的一个算法
- 一步一步写算法(之链表逆转)
- 一步一步写算法(之链表逆转)
- 一步一步写算法(之链表逆转)
- 二哥学算法之链表逆转
- 逆转一个链表
- 算法学习之旅,初级篇(1)--大小写转换
- 算法学习之旅,初级篇(2)--水仙花数
- 算法学习之旅,初级篇(4)--哈密尔顿距离
- 算法学习之旅,初级篇(5)--数码平方和
- 算法学习之旅,初级篇(6)--统计字符
- 算法学习之旅,初级篇(7)--数字塔
- 算法学习之旅,初级篇(9)--字符串逆序
- 算法学习之旅,初级篇(10)--回文字符串
- 算法学习之旅,初级篇(12)--最小公倍数
- 网易2018校招内推题目记录
- 树-堆结构练习——合并果子之哈夫曼树
- HDU 1030 Delta-wave(找规律)
- UDP打洞原理总结
- hdu 6045 Is Derek lying?
- 算法学习之旅,初级篇(27)-–逆转一个链表
- iOS原生二维码扫码实现(含蒙版和扫码动画)
- [HDU](2188)选拔志愿者 ---巴什博弈(博弈)
- Oracle笔记3
- SQL获取数据库名,表名,列名,说明等信息
- 分页(Pagination)
- meta标签的方法
- Java基础----对象的输出输入流
- 集合博客