LeetCode:206. 反转链表

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

示例 :

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

 

最简单的方法,就是迭代。

    public static Node reverseList(Node head) {

        if(head==null || head.next==null){
            return head;
        }

        Node prev = null;
        while (head != null){  //假设当前链表head:A->B->C->null
            Node temp = head.next; //temp临时链表:B->C->null
            head.next = prev; //head指向prev后:A->null
            prev = head; //prev被赋值后:A->null
            head = temp; //head再次被赋值,进入下一次迭代:B->C->null
        }
        return prev;
    }

 其次,就是递归。

    public static Node reverseList(Node head) {

        if(head==null || head.next==null){
            return head;
        }
        //假设当前链表head:A->B->C->null
        Node last = reverseList(head.next); //先递归到最后一个元素last:C->null;此时head:B->C->null
        head.next.next = head; //注意这步,反转指针,参考上一步,则得到C->B->C->B->...循环
        head.next = null;//这一步是为了中断上一步的无限循环
        return last;
    }

 

posted @ 2021-08-19 14:20  蜗壳吃虾米  阅读(31)  评论(0)    收藏  举报