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

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

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; }
    }
}

你可能感兴趣的:(LeetCode刷题总结,leetcode,链表,算法)