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代码测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值