反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
两种方法:
1.迭代:
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* reverseList(ListNode* head) { 12 if(head == 0) 13 return NULL; 14 ListNode *p = head->next; 15 head->next = 0; 16 while(p!=0) 17 { 18 ListNode *p1 = p->next; 19 p->next = head; 20 head = p; 21 p = p1; 22 } 23 return head; 24 } 25 };
24ms,9mb
2.递归:
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* reverseList(ListNode* head) { 12 if(head == 0 || head->next == 0) 13 return head; 14 ListNode * pNode = reverseList(head->next); 15 head->next->next = head; 16 head->next = 0; 17 return pNode; 18 } 19 };
16ms,9.3mb