反转链表分析

反转链表

记录下,脑壳疼。。


定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

 

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

 

限制:

0 <= 节点个数 <= 5000

先上代码:
public class ListNode {
      int val;
      ListNode next;
      ListNode(int x) { val = x; }
}
 
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre=null;
        ListNode next=null;
        while(head!=null){
          next=head.next;
          head.next=pre;
          pre=head;
          head=next;
        }
        return pre;
    }
}

拿题目中的实例来说:1->2->3->4->5->null


第一次遍历
head true
next head为1,head.next为2
head.next pre为null,head.next=null(1->null)
pre pre=1->null
head head=2

第二次遍历
head true
next head为2,head.next为3
head.next pre为(1->null),head.next=1(2->1->null)
pre pre=2->1->null
head head=3

第三次遍历
head true
next head为3,head.next为4
head.next pre为(2->1->null),head.next=1(3->2->1->null)
pre pre=3->2->1->null
head head=4

第四次遍历
head true
next head为4,head.next为5
head.next pre为(3->2->1->null),head.next=1(4->3->2->1->null)
pre pre=4->3->2->1->null
head head=5

第四次遍历
head true
next head为5,head.next为null
head.next pre为(4->3->2->1->null),head.next=1(5->4->3->2->1->null)
pre pre=5->4->3->2->1->null
head head=null

第五次遍历,head已经为null,停止遍历,返回pre。此时链表已经反转。


原文始发于微信公众号(阿黄学编程):反转链表分析

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/35625.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!