剑指offer-15 反转链表 -- Java实现

题目

输入一个链表,反转链表后,输出新链表的表头。
牛客网给定以下链表类。

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/

分析

思路:

要实现翻转链表,如下图,设i为当前结点cur,则首先需将cur.next保存到一临时结点,否则如果改变了cur的指向,链表就断了。然后将cur指向前一结点,因此前一结点也需一临时结点存储。最后需要三个临时结点,我们设为pre,cur,next。详细思路见代码。
注意:此处要注意以下三个边界条件:
1)输入的头结点为null;
2)输入的链表只有1个结点;
3)输入的链表有多个结点;
翻转链表示意

代码:

public class Solution {
public class Solution {
    public ListNode ReverseList(ListNode head) {
        ListNode pre = null;
        ListNode cur = head;
        ListNode next = null;
        
        while(cur != null) {
            next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next; //注意此处因cur指向下一个结点了已经,然后继续进入while判断,最后一个结点为null时,其前一个结点才是倒数第一个结点。因此最后应返回pre结点。
        }
        
        return pre;
    }
}
}
发布了46 篇原创文章 · 获赞 17 · 访问量 1042

猜你喜欢

转载自blog.csdn.net/weixin_42054926/article/details/103064359