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最后一个节点,所以返回preListNode 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; }}
}