LeetCode 206-反转链表

1. 反转链表

public class ListReverse206 {
    //定义一个单链表
    public class ListNode {
        int val;           //当前节点值
        ListNode next;     //下一个节点值
        //构造方法 初始化当前节点值
        ListNode(int x) { val = x; }
    }

    /**反转链表    时间复杂度 O(n)
     * 例:输入: 1->2->3->4->5->NULL   输出: 5->4->3->2->1->NULL
     * @param head  链表头节点
     * @return 返回反转链表
     * 
     * 设置三个节点pre(前节点)、cur(当前节点)、next(下一个节点)
     * (1)每次查看cur节点是否为NULL,如果是,则结束循环,获得结果
     * (2)如果cur节点不是为NULL,则先设置临时变量next为cur的下一个节点
     * (3)让cur的下一个节点变成指向pre,而后pre移动cur,cur移动到next
     * (4)重复(1)(2)(3)
     */
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode curr = head;
        while (curr != null) {
            ListNode nextTemp = curr.next; //临时下一个节点
            curr.next = prev;              //当前节点指向前一个节点
            prev = curr;                   //将prev移动到curr位置
            curr = nextTemp;               //将curr位置移动到临时下一个节点
        }
        return prev;                       //prev最后就是当前节点
    }
}

2. 反转链表图解

 

3.LeetCode代码测试

发布了53 篇原创文章 · 获赞 0 · 访问量 1644

猜你喜欢

转载自blog.csdn.net/weixin_45450428/article/details/103938134