java中单链表倒转的实现方法

来源:互联网 发布:linux mtd源代码分析 编辑:程序博客网 时间:2024/05/22 15:42

java中有关单链表反转的方法有很多种,这里记录一种并附上详细步骤:

代码如下

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode reverseList(ListNode head) {         ListNode header = new ListNode(0);        header.next = head;        ListNode cur = header.next;        while(cur != null && cur.next != null){            ListNode n = cur.next;    //(1)            cur.next = n.next;        //(2)            n.next = header.next;     //(3)            header.next = n;          //(4)        }        return header.next;    }}

主要的操作是在while循环中,下面画图解释一下是如何实现单链表倒转的:
首先java中没有指针的概念,但是可以看到ListNode中的next属性其实就代表指向下一个节点的“指针”,因此可以这样来理解:

1、原单链表:

假设单链表有三个元素[1,2,3],0为上述的头对象

2、执行(1)、(2)后:

cur.next指向了n.next:
这里写图片描述

3、执行(3):

这里写图片描述

4、执行(4):

这里写图片描述
第一次循环结束,第一次循环后的单链表如上图所示。
cur != null && cur.next != null,因此执行第二次循环:

5、第二次执行(1),(2):

这里写图片描述

6、第二次执行(3):

这里写图片描述

7、第二次执行(4):

这里写图片描述
cur.next == null 推出循环
以上,实现单链表的倒转。

0 0
原创粉丝点击