leetcode 92 指定範圍反轉鍊錶(中等)

2021-10-05 21:59:57 字數 1559 閱讀 5578

反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。

說明:1 ≤ m ≤ n ≤ 鍊錶長度。

示例:輸入: 1->2->3->4->5->null, m = 2, n = 4

輸出: 1->4->3->2->5->null

解題思路:

1、構造乙個dummy節點 指向頭結點,為了可以在頭節點指標發生變化的時候,直接用dummy->next定位到頭節點,如下:

dummy->1->2->3->4->5->null

2、利用m定位到開始節點的 前乙個節點。m=2時,則操作 2那個節點。則前乙個 previous 節點值為1

3、規定此時 1節點為previous節點,2節點為cur_operator_node,cur_operator_node->next即3節點是temp節點

4、斷開cur_operator_node和temp的連線關係,即2和3的連線, 變更cur_operator_node->next = temp->next,即為2指向4。

斷開temp和temp->next的連線關係,即3和4的連線關係,變更為temp->next = previous->next,即3指向2。

斷開previous和previous->next的連線關係,即1和2的連線關係,變更為 previous->next=temp,即1指向3。

至此完成了3節點逆置,新的鍊錶如下:

dummy->1->3->2->4->5->null

5、此時1節點仍然是previous節點,2節點仍然是cur_operator_node,cur_operator_node->next即4節點是temp節點

6、按照4的步驟:

斷開cur_operator_node和temp的連線關係,即2和4的連線,變更cur_operator_node->next = temp->next,即為2指向5。

斷開temp和temp->next的連線關係,即4和5的連線關係,變更為temp->next = previous->next,即4指向3。

斷開previous和previous->next的連線關係,即1和3的連線關係,變更為 previous->next=temp,即1指向4。

至此完成了4節點逆置,新的鍊錶如下:

dummy->1->4->3->2->5->null

完成逆轉。返回節點頭即dummy->next。

即使m=1,1節點為cur_operator_node也成立,因為previous節點存在,是dummy。

**如下:

struct node ;

node* reverse_with_range(node* head, int m, int n) ;

dummy.next = head;

auto previous = &dummy;

for (int i = 1; i < m; ++i)

auto cur_operator_node = previous->next;

for (int i = 0; i < n - m ; i++)

return dummy.next;

}

leetcode 92反轉鍊錶

反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。說明 1 m n 鍊錶長度。示例 輸入 1 2 3 4 5 null,m 2,n 4 輸出 1 4 3 2 5 null definition for singly linked list.public class listnode class...

LeetCode 92 反轉鍊錶 II

反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。說明 1 m n 鍊錶長度。示例 輸入 1 2 3 4 5 null,m 2,n 4 輸出 1 4 3 2 5 null 5ms definition for singly linked list.public class listnode c...

leetcode92 反轉鍊錶 II

反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。說明 1 m n 鍊錶長度。示例 輸入 1 2 3 4 5 null,m 2,n 4輸出 1 4 3 2 5 null思路 先往後遍歷找到需要反轉的節點作為起點 count m 然後按照劍指offer 反轉鍊錶 的思路,設定curr,pre,p...