Reverse a singly linked list.
Example:
Input: 1->2->3->4->5->NULL Output: 5->4->3->2->1->NULL
这道题没有做出来,递归还是得多多练习才能掌握。
第一种方法,递归做法。
/**
* 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 == NULL || head->next == NULL) return head;
ListNode * node = reverseList(head->next);
head -> next -> next = head;
head -> next = NULL;
return node;
}
};
第二种做法,非递归。
/**
* 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 == NULL) return NULL;
ListNode * pre = NULL, *now = head;
while(now){
ListNode *next = now -> next;
now -> next = pre;
pre = now;
now = next;
}
return pre;
}
};
非递归做法有稍微快一点。
但是递归做法还是比较秀,需要多多练习,更加深入的掌握。