JavaScript之DOM操作
阿新 • • 發佈:2021-01-29
技術標籤:刷題
難度:困難。
比較繞,得想清楚。
- 找到當前k個數中的最後一個,即程式碼中的end_k_node,如果這個節點存在,則繼續下面的替換;否則結束。
- 每次將當前的K組節點的第一個節點放到end_k_node的後面,直到第一個節點為end_k_node為止。
- 繼續對下一個K組進行操作。
正確解法:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
if(k <= 1||!head||!head->next)return head;
ListNode* node = head, *ans = head;
int flag = 0;
while(node->next){
ListNode *end_k_node = node->next;
if(flag == 0){
end_k_node = node;
}
int p = 0;
for(int i = 0; i < k - 1; i++){
if(!end_k_node->next){
p = 1;
break;
}
end_k_node = end_k_node->next;
}
if (p)break;
ListNode* temp_node = node->next;
if(flag == 0){
temp_node = node;
ans = end_k_node;
flag = 1;
}
else{
node->next = end_k_node;
}
node = temp_node;
for(int i = 0; i < k - 1; i++){
ListNode *n = temp_node->next;
temp_node->next = end_k_node->next;
end_k_node->next = temp_node;
temp_node = n;
}
}
return ans;
}
};