1. 程式人生 > 其它 >Gitlab 備份、恢復、平級遷移

Gitlab 備份、恢復、平級遷移

1. 題目

定義一個函式,輸入一個連結串列的頭節點,反轉該連結串列並輸出反轉後連結串列的頭節點。

2. 示例

1 輸入: 1->2->3->4->5->NULL
2 輸出: 5->4->3->2->1->NULL

限制:

0 <= 節點個數 <= 5000

3. 題解

本題給了兩種解題方式:棧和迭代

    • 因為本題是要倒序。所以第一想法都是棧,棧的思想是先進後出。
    • 第一遍依次遍歷連結串列,將節點放入棧。
    • 第二遍遍歷棧,依次將棧頂元素加入連結串列
  • 迭代
    • 在遍歷連結串列時,將當前節點的 next 指標改為指向前一個節點。由於節點沒有引用其前一個節點,因此必須事先儲存其前一個節點。在更改引用之前,還需要儲存後一個節點。最後返回新的頭引用。

4. 實現

4.1 棧

 1 //
 2     public ListNode reverseListA(ListNode head) {
 3         // 定義棧,將連結串列的依次壓如棧底
 4         Stack<ListNode> stack = new Stack<>();
 5         if(head == null) return null;
 6         while (head != null) {
 7             stack.push(head);
 8             head = head.next;
9 } 10 // 獲取棧頂元素,並將其作為頭結點 11 ListNode cur = stack.pop(); 12 // 指向頭頭結點 13 ListNode p = cur; 14 // 依次出棧 15 while (!stack.empty()) { 16 // 依次加入連結串列 17 cur.next = stack.pop(); 18 cur = cur.next; 19 } 20 // 最後一個元素為空
21 cur.next = null; 22 return p; 23 }

4.2 迭代

 1 // 迭代
 2     public ListNode reverseListB(ListNode head) {
 3         ListNode prev = null, cur = head;
 4         while (cur != null) {
 5             // 獲取下一個節點
 6             ListNode next = cur.next;
 7             // 當前節點的下一節點指向prev
 8             cur.next = prev;
 9             // 再反過來賦值,就達到了prev到達頭結點
10             prev = cur;
11             // 遍歷下一個節點
12             cur = next;
13         }
14         return prev;
15     }

5. 結語

  努力去愛周圍的每一個人,付出,不一定有收穫,但是不付出就一定沒有收穫! 給街頭賣藝的人零錢,不和深夜還在擺攤的小販討價還價。願我的部落格對你有所幫助(*^▽^*)(*^▽^*)!

  如果客官喜歡小生的園子,記得關注小生喲,小生會持續更新(#^.^#)(#^.^#)。

但行好事 莫問前程