LeetCode206 反转链表

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

 

递归:

递归到尾节点,然后往回;每次都是返回尾结点。对于每个递归栈的head,将head->next->next设置为自己,即把下一个的下一个设为自己;再把自己的next设置为nullptr,否则头部的next还是指向原来得下一个,会出错

迭代:

一样的思想,只是要提前保存下一个节点。

 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         return iterate(head);
13     }
14 
15     ListNode* iterate(ListNode* head){
16         if(head==nullptr)
17             return head;
18         ListNode* prev=head;
19         head=head->next;
20         prev->next=nullptr;
21         while(head!=nullptr){
22             ListNode* save=head->next;
23             head->next=prev;
24             prev=head;
25             head=save;
26         }
27         return prev;
28     }
29 
30     ListNode* recursive(ListNode* head){
31         if(head==nullptr || head->next==nullptr){
32             return head;
33         }
34         ListNode* ret=recursive(head->next);
35         head->next->next=head;
36         head->next=nullptr;
37         return ret;
38     }
39 };

 

posted @ 2020-07-21 16:40  __rookie  阅读(119)  评论(0编辑  收藏  举报