反向链表解题方案
class Solution {
public ListNode reverseList(ListNode head) {
// 方法一:逐个将旧链表的节点插入到新链表
// ListNode new_head = null; //新链表的尾节点
// while(head!=null){
// ListNode tmp = head; //记录节点
// head = head.next; //遍历后移
// tmp.next = new_head; //将节点放入新链表表头
// new_head = tmp; //更新新链表的表头
// }
// return new_head;
//方法二:使用三指针遍历
// if(head==null) return head;
// ListNode p0 = null; //新链表的尾节点
// ListNode p1 = head; //原链表的表头
// ListNode p2 = head.next; //原链表表头的next
// while(p1!=null){
// p1.next = p0;
// p0 = p1;
// p1 = p2;
// if(p2!=null){
// p2 = p2.next;
// }
// }
// return p0;
//方法三:递归,这个就有点妙了
if(head==null || head.next==null) return head;
ListNode p = reverseList(head.next);
head.next.next = head;
head.next = null;
return p;
}
}