今天会介绍另外一种反转单链表的方法,对于单链表反转这一类的算法,最重要的思想就是用临时变量来记住需要记住的节点。一个不够,那就用两个,或者用三个临时变量。 这次还是以图表来表现算法的过程,不同于上一篇,这次的头节点使用链表中的第一个节点。 该方法的思想就是遍历每个节点,将其插入到第一个节点之后。 如 ...
分类:
其他好文 时间:
2017-06-11 15:43:21
阅读次数:
197
输入一个链表,反转链表后,输出链表的所有元素。 ...
分类:
编程语言 时间:
2017-06-07 00:51:02
阅读次数:
149
1定义 单链表node的数据结构定义如下: 2 方法1:就地反转法 2.1 思路 把当前链表的下一个节点pCur插入到头结点dummy的下一个节点中,就地反转。 dummy->1->2->3->4->5的就地反转过程: 2.2 解释 1初始状态 2 过程 pCur是需要反转的节点。 伪代码 3 循环 ...
分类:
其他好文 时间:
2017-05-16 12:51:10
阅读次数:
148
题目描述 输入一个链表,反转链表后,输出链表的所有元素。 解题思路:该题需要定义三个指针,分别记录当前结点、前一结点、下一结点。 反转过程中,先获得下一结点,然后让当前结点下一个指向前一结点,下一个前一结点为当前结点,当前结点为下一结点。注意如果下一结点为空,则当前结点为为最后一个结点,即返回的头指 ...
分类:
其他好文 时间:
2017-05-16 10:53:41
阅读次数:
161
题目: Reverse a singly linked list. 思路: 以1—>2->3->4为例,链表反转的过程如下: 第一次循环结束: head: 2->3->4->NULL newhead: 1->NULL 第二次循环结束: head: 3->4->NULL newhead: 2->1-> ...
分类:
其他好文 时间:
2017-05-04 14:40:38
阅读次数:
138
最近在做笔试题时,遇到一道编程题:单向链表反转算法。 一共做了两个版本:递归版和迭代版。 递归版的灵感来源于《Haskell 趣学指南》中非常简洁的快速排序算法的实现。 迭代版的思想和冒泡排序有点像,又不完全一样。 ...
分类:
编程语言 时间:
2017-04-17 09:47:49
阅读次数:
249
1, 非递归方式 List* ListRevert(List* list){ List* head = NULL; //new list head List* temp = NULL; while (list!= NULL){ //each time pick up a node from the ...
分类:
其他好文 时间:
2017-04-17 00:23:16
阅读次数:
149
算法概述:要求实现将一条单向链表反转并考虑时间复杂度。 算法分析: 数组法(略): 将列表元素逐个保存进数组,之后再逆向重建列表 点评:实现逻辑最简单,需要额外的内存开销。 移动指针: 通过三个指针逐个从链表头开始逐一反转链表元素的指针 点评:不需要额外的内存开销,会改变原始链表。 递归: 以递归的 ...
分类:
编程语言 时间:
2017-04-16 17:01:37
阅读次数:
137
题目:输入一个链表,反转链表后,输出链表的所有元素。 思路:逐个扫描,翻转指针。。。个人认为翻转链表的操作是链表题目中最难最考验指针的操作。。。。 ...
分类:
其他好文 时间:
2017-04-08 16:16:05
阅读次数:
136
#include #include #include "string.h" #include "stdio.h" #include #include #include using namespace std; struct ListNode { int val; struct ListNode *n... ...
分类:
其他好文 时间:
2017-03-21 12:19:12
阅读次数:
210