题解 | #反转链表#

反转链表

https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    // 单链表里面只存了后节点,并且只能从第一个节点开始查找
    public ListNode ReverseList(ListNode head) {
        // 一个或者为空的情况
        if( head == null || head.next == null){
            return head;
        }
        // 定义两个个指针,分别指向当前节点的前节点和后节点
        ListNode pre = null , next = null;
        while(head != null){
            // 当前节点的后节点要取出来,等会要把它变成当前节点
            next = head.next; 
            // 把前节点变成当前节点的后节点,这样就实现了反转
            head.next = pre;
            // 然后当前节点现在变成前节点
            pre = head;
            // 后面的节点变成当前节点
            head = next;  
        }
        return pre;

    }
}

之前对ListNode这种数据结构不是很熟悉,导致理解了很久。

把ListNode看作两个部分来理解,当前的节点的元素,以及下一个指针的元素。

输入的链表,其实也就是两个两个连起来的,一个接一个组成了链表。

反转也一样。

比如一开始输入 1 2 3 4,头节点head就是1,指向了2;然后2 指向了 3;3指向了4。

反转就是,首先把前节点pre赋值为null,然后把它作为当前节点的后节点,也就是,1指向了null,2指向了1,3指向了2,4指向了3。这样就很好理解了。

全部评论

相关推荐

CVTE校招内推:可以试试我们这,硬件还没招满
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务