您的位置:首页 > 理论基础 > 数据结构算法

反转单链表的几种方法

2015-07-24 16:34 316 查看


反转单链表的几种方法

  最近试着做一些笔试面试题,既是为来年找工作做准备,也可以做为数据结构和算法的复习笔记,就陆续发在这里吧,有需要的朋友可以看一下,如果有没考虑周全的地方欢迎指正。

关于头指针的问题:
你只要理解链表的中带不带头节点的问题
带头结点就多了一个空的结点指向第一个结点;
不论有没有头结点,而头指针则是指向第一个结点


  先来一个最常见的题目:反转单链表。假设单链表的数据结构定义如下:

  

  并且这个单链表有一个头指针list指向第一个结点,最后一个结点指向NULL,很容易理解。

  最容易想到的第一种方法就是重新建立一个单链表newList,每次将list中的第一个结点放到newList后面。注释比较详细,所以就不具体说了,直接看代码吧:

  第二种方法是每次都将原第一个结点之后的那个结点放在list(相当于头指针)后面,下图是原始的单链表。


  为了反转这个单链表,我们先让头结点的next域指向结点2,再让结点1的next域指向结点3,最后将结点2的next域指向结点1,就完成了第一次交换,顺序就变成了Header-结点2-结点1-结点3-结点4-NULL,然后进行相同的交换将结点3移动到结点2的前面,然后再将结点4移动到结点3的前面就完成了反转,思路有了,就该写代码了:

  第三种方法跟第二种方法差不多,第二种方法是将后面的结点向前移动到头结点的后面,第三种方法是将前面的结点移动到原来的最后一个结点的后面,思路跟第二种方法差不多,就不贴代码了。

  我只想到这三种方法,如果你还知道其它方法,欢迎留言告诉我,多谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息