Reverse a singly linked list.
Hint:
思路:
A linked list can be reversed either iteratively or recursively. Could you implement both?
迭代的方式,可以使用一个哨兵节点,方便反转;
递归的方式,把链表分成左右两部分,左边的是反转好的,右边的是待反转的;每次把右边的第一个节点A揪下来,A->next=LeftList;就好了。
递归代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(!head||!head->next){
return head;
}
return reverse(NULL,head);
}
ListNode* reverse(ListNode* l, ListNode *r){
if(!r){
return l;
}
ListNode *next=r->next;
r->next=NULL;//该步骤多余,只是为了表示"断开"
r->next=l;
return reverse(r,next);
}
};