Gitlab 備份、恢復、平級遷移
阿新 • • 發佈:2021-07-07
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. 結語
努力去愛周圍的每一個人,付出,不一定有收穫,但是不付出就一定沒有收穫! 給街頭賣藝的人零錢,不和深夜還在擺攤的小販討價還價。願我的部落格對你有所幫助(*^▽^*)(*^▽^*)!
如果客官喜歡小生的園子,記得關注小生喲,小生會持續更新(#^.^#)(#^.^#)。
但行好事 莫問前程