翻转链表
LeetCode:翻转链表
题目描述:
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
思想:
前插法很熟悉了,主要是递归。注意每次递归返回末尾结点,即新链表的头结点,不然得不到结果;函数体内记录当前结点和下一个结点,这递归相当于从倒数第二个结点开始向左翻转,每次返回后,左移一个结点继续下一次翻转。
代码
//前插
private ListNode preInsert(ListNode p){
ListNode L =new ListNode(0),temp;
L.next=null;
while(p!=null){
temp = p.next;
p.next=L.next;
L.next = p;
p=temp;
}
return L.next;
}
//递归
private ListNode recursive(ListNode p){
if(p==null||p.next==null){
return p;
}
ListNode q =p.next;
ListNode head = recursive(q);
q.next=p;
p.next=null;
return head;
}
public ListNode reverseList(ListNode head) {
return recursive(head);
//return preInsert(head);
}