Reverse a singly linked list.
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); } };
原文地址:http://blog.csdn.net/u010786672/article/details/45506279