LeetCode206---反转链表(Java实现,有图解)

题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例:

输入:[ 1 , 2 , 3 , 4 ]

输出:[ 4 , 3 , 2 , 1 ]

分析:该链表是单链表,反转后的链表的每个结点都指向前一个结点,即第一个指向空,最后一个指向倒数第二个。

整个过程大致可以概括为:断开当前结点指向 ,让该结点指向前一个结点,以此类推到最后一个节点。

此题将采用三指针法,画图进行说明:

代码实现:

public class ListNode {
    ListNode next;
    int val;
    //构造方法
    public ListNode(int val){
        this.val = val;
    }
    public ListNode(){

    }
    public ListNode(int val,ListNode next){
        this.val = val;
        this.next = next;
    }
}
class Solution{
    public ListNode reverseList(ListNode head){
        ListNode cur = head;
        ListNode pre = null;
        ListNode next = null;
        while(cur != null){
            next = cur.next;    //next指向cur的下一个结点
            cur.next = pre;     //cur指向前一个结点
            pre = cur;          //pre指向cur
            cur = next;         //cur指向next
        }
        return pre;             //返回反转后链表的首结点
    }
}

说明:结点的构造题目一般都是给出的,我们只需实现主体,也就是Solution中的内容即可。

经验分享 程序员 微信小程序 职场和发展