LeetCode刷题—链表—206反转链表easy(双指针与递归)

文章介绍了如何通过双指针和递归方法解决链表反转问题,包括操作步骤、边界条件设定以及两种实现方式的代码示例。
摘要由CSDN通过智能技术生成

1、题目属于对基础的数据结构的操作,出现频次较高

题目描述:

880cb29e9fc84322a1961c4181b7d839.png

2、解题思路如下:

双指针法:

解这道题,首先明白:
1、操作步骤  2、迭代
3、循环边界条件,确定初始值和循环终止条件
4、最后返回值

方法是什么呢,举例子,
循环终止条件:cur走到末尾,等于null值了,我希望他不执行循环结构中的语句了,直接返回了
初始值:开始的时候,走一遍循环,cur从头结点开始,pre等于null才能满足条件
最终返回值:cur走到末尾,等于null才结束,最后一次循环pre最后一个节点,所以返回pre
public class Solution206 {
    public ListNode reverseList(ListNode head) {
//        解这道题,首先明白:
//        1、操作步骤  2、迭代
//        3、循环边界条件,确定初始值和循环终止条件
//        4、最后返回值
        
//        方法是什么呢,举例子,
//        循环终止条件:cur走到末尾,等于null值了,我希望他不执行循环结构中的语句了,直接返回了
//        初始值:开始的时候,走一遍循环,cur从头结点开始,pre等于null才能满足条件
//        最终返回值:cur走到末尾,等于null才结束,最后一次循环pre最后一个节点,所以返回pre
        ListNode cur = head;
        ListNode pre = null;
        while(cur!=null){
            ListNode temp = cur.next;
            cur.next = pre;
            // 迭代
            pre = cur;
            cur = temp;
        }
        return pre;
    }
     public static class ListNode {
        int val;
        ListNode next;
        ListNode() {}
        ListNode(int val) { this.val = val; }
        ListNode(int val, ListNode next) { this.val = val; this.next = next; }
      }
}

递归法:

基本严格按照双指针法改编,一一对应

public class Solution206_2 {
    public ListNode reverseList(ListNode head){
        ListNode pre = null;
        ListNode cur = head;
        return reverse(pre,cur);
    }
    public ListNode reverse(ListNode pre, ListNode cur) {
        if(cur==null) return pre;
        ListNode temp = cur.next;
        cur.next = pre;
        return reverse(cur, temp);
    }
    public static class ListNode {
        int val;
        ListNode next;
        ListNode() {}
        ListNode(int val) { this.val = val; }
        ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值