java实现反转链表

反转链表

题目

力扣206
题目:反转一个单链表。
示例:

  • 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
  • 输入:1->2 ->NULL 输出:2->1->NULL
  • 输入:[] 输出:[]

思路

快慢指针(双指针)的灵活使用

  1. 这个题非常考究大家对双指针的运用,此题大家需要看懂一个地方,那就是翻转以后,头结点head从第一个节点到了最后一个节点。其他元素没有变化,指针的方向发生了反转。
  2. 此时大家需要思考,双指针怎么滑动,谁在前,谁在后。节点的指针怎么反转比较合理。
  3. 我们需要只要的是,链表反转以后,相对于原来的链表,本来是当前节点指向下一个节点,反转以后成为下一个节点指向前一个结点。
  4. 考虑到双指针,我们需要首先定义一个零时节点变量来保存当前节点的下一个节点,ListNode temp = null;
  5. 同时我们需要用一个pre来表示前一个结点, ListNode pre = null;
  6. 当前结点则用 ListNode cur = head;

核心思路

      temp = cur.next;  //保存当前节点
      cur.next = pre; //让当前节点指向前一个结点(指针以发生转向)
      pre = cur;//前一个结点的指针移到当前结点(慢指针)
      cur = temp;//当前结点的指针指向下一个结点(快指针)

代码

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head == null) {
            return head;
        }
        ListNode pre = null;
        ListNode temp = null;
        ListNode cur = head;
        while(cur!=null) {
            temp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = temp;
        }
        return pre;

    }
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值