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