【剑指Offer24.反转链表】迭代解法

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:输入1→2→3→4→5→NULL
输出5→4→3→2→1→NULL

分析:反转后,每一个结点指向其前继结点。
1.若先改变当前结点指向,将当前结点指向其前继结点,会造成当前结点原指向丢失,链表断开,后面的节点都无法访问。因此,在改变当前结点指向之前,需要设置临时结点变量temp,保存当前结点原先的指向。
2.在当前结点改变指向之后(即由原指向改为指向前继结点),前继结点和当前结点的下标都要右移一步,准备下个结点的反转。

迭代的代码:

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre = null;
        ListNode cur = head;
        
        while(cur!=null){
            ListNode temp = cur.next;//保留当前结点cur的原指向
            cur.next=pre;//改变当前结点cur指向,将其指向前继结点
            pre=cur;//移动前继结点pre到当前结点
            cur=temp;//移动当前结点cur到后继节点
        }
        return pre;
    }
}

除了迭代法,还有递归法和借助栈。参考leetcode

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值