[LeetCode 206]Reverse Linked List反転単鎖表

4062 ワード

この問題は与えられたシングルチェーン表を反転させることを要求しています.学校の面接の手がコードを引き裂く過程の高周波問題です.シングルチェーン表のこの一番簡単なデータ構造に対する理解をよく調べられます.反復と再帰の2つの方法を使用して、与えられた単一チェーンテーブルを反転させることができ、具体的には以下のように実現される.
 
 1 class Solution {
 2 public:
 3     ListNode* reverseList(ListNode* head) {
 4         return reverseList_iteratively(head);
 5        //return reverseList_recursively(head);//    leetcode  
 6     }
 7 //   
 8     ListNode* reverseList_iteratively(ListNode* head)
 9     {
10         ListNode* p = nullptr;
11         ListNode* w = nullptr;
12         while(head)
13         {
14             p = head->next;
15             head->next = w;
16             w = head;
17             head = p;
18         }
19         return w;
20     }
21  
22 //  
23      ListNode* reverseList_recursively(ListNode* head)
24     {
25         if(head==nullptr||head->next==nullptr)
26         {
27             return head;
28         }
29         ListNode* h = reverseList_recursively(head->next);
30         head->next->next=head;//           
31         head = nullptr;
32         return h;
33     }
34 };