单链表逆序的几种方法
2016-01-21 21:39
405 查看
假设单链表数据结构定义如下:
单链表有一个头指针指向第一个结点,最后一个结点指向NULL
一、最容易想到的方法,新建一个单链表newNode,每次将原先链表的第一个结点放到newNode后
二、每次将原第一个结点后的结点放在head后面
三、与第二种方法类似,推荐这种方法
struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} };
单链表有一个头指针指向第一个结点,最后一个结点指向NULL
一、最容易想到的方法,新建一个单链表newNode,每次将原先链表的第一个结点放到newNode后
ListNode* reverseList(ListNode* head) { ListNode *newNode = new ListNode(0);//新链表头结点 ListNode *tmp;//指向原先链表的第一个结点 newNode->next = head; ListNode *cur = head; while(cur && cur->next) { tmp = newNode->next;//保存后续结点 newNode->next = cur->next;//将原先链表的第一个结点放到新链表中 cur->next = cur->next->next;//从原先链表中摘除这个结点 newNode->next->next = tmp;//恢复新链表中后续结点的指针 } return newNode; }
二、每次将原第一个结点后的结点放在head后面
ListNode* reverseList(ListNode* head) { ListNode *tmp = NULL; ListNode *cur = NULL; if(!head) return NULL; cur = head->next; while(cur) { tmp = cur->next; cur->next = tmp->next; tmp->next = head->next; head->next = tmp; } return head; }
三、与第二种方法类似,推荐这种方法
ListNode* reverseList(ListNode* head) { ListNode *cur = head; ListNode *tmp, *prev = NULL; while (cur) { tmp = cur->next; cur->next = prev; prev = cur; cur = tmp; } return prev; }
相关文章推荐
- python-day2
- 泛型
- 顺时针打印矩阵
- Oracle RDA(Remote Diagnostic Agent) 工具说明
- Android.mk文件解析
- hdu2044
- kalman跟踪的实现
- matlab2015b unix lmstart 等文件明明存在却提示找不到的解决方法
- 什么是NGD下一代云桌面
- 字符驱动访问
- 离散概率初步 一、全概率公式
- bzoj3786 星际探索
- adapter接口及实现类
- 安卓项目实战----收集用户信息(一)
- 三种实现servlet的方式有什么区别?--转载
- 20160121--Spring
- linux系统构架 - LB集群之LVS的NAT
- 【BZOJ1030】文本生成器
- 浅析C# 中object sender与EventArgs e
- 当Scheduler拿不到url的 时候,不能立即退出