面试题16:反转链表

简介:
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。

 假设有链表A->B->C->D->E->F->G。在反转链表过程中的某一阶段,其链表指针指向为:A<-B<-C<-D  E->F->G。也就是说在结点D之前的所有结点都已经反转,而结点D后面的结点E开始的所有结点都没有反转。这样D跟E之间存在了断裂。我们如果要实现链表的反转,会有以下几个重要步骤:

  1. D->E变为D->C,指针反转
  2. 指针往后移动一个,操作下一个结点E
  3. 结合1.2我们发现需要操作3个指针,分别是C,D,E。

因此可以考虑存储C/D/E三个结点的指针,通过这三个结点的指针实现反转。

代码实例:

View Code

运行结果:

1
1 2 3 4 5 6 7
7 6 5 4 3 2 1

ps:2012-5-3

发现有一种更加简洁的写法,就是不需要pReversedHead指针,从上述程序我们可以看出来pReversedHead指针只是单纯的用来保存反转链表的头指针,但是pPrev和pNode指针其实就包含反转链表的头指针,因此我们没有必要单独定义一个头指针来保存。修改后的函数如下所示:

View Code

 

 本文转自xwdreamer博客园博客,原文链接http://www.cnblogs.com/xwdreamer/archive/2012/04/26/2472797.html,如需转载请自行联系原作者

目录
相关文章
|
4月前
面试题 02.04:分割链表
面试题 02.04:分割链表
37 0
|
11天前
|
存储 Java 编译器
链表面试题的总结和思路分享
链表面试题的总结和思路分享
|
2月前
|
存储 算法
【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解
【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解
|
2月前
|
存储 算法 Java
【数据结构与算法】2、链表(简单模拟 Java 中的 LinkedList 集合,反转链表面试题)
【数据结构与算法】2、链表(简单模拟 Java 中的 LinkedList 集合,反转链表面试题)
43 0
LeetCode | 面试题 02.04. 分割链表
LeetCode | 面试题 02.04. 分割链表
|
4月前
|
算法 Java C++
数据结构与算法面试题:实现一个函数,判断一个链表是否为回文链表。(提示:反转后半部分链表比对前半部分)
数据结构与算法面试题:实现一个函数,判断一个链表是否为回文链表。(提示:反转后半部分链表比对前半部分)
21 0
|
4月前
|
Java
面试题 02.07:链表相交
面试题 02.07:链表相交
16 0
|
4月前
面试题 02.06:回文链表
面试题 02.06:回文链表
19 0
|
4月前
面试题 02.05:链表求和
面试题 02.05:链表求和
16 0
|
5月前
|
算法 Java 程序员
【Java程序员面试专栏 数据结构篇】二 高频面试算法题:链表
【Java程序员面试专栏 数据结构篇】二 高频面试算法题:链表
136 0