1. 程式人生 > 其它 >JavaScript之DOM操作

JavaScript之DOM操作

技術標籤:刷題

難度:困難。
比較繞,得想清楚。

  1. 找到當前k個數中的最後一個,即程式碼中的end_k_node,如果這個節點存在,則繼續下面的替換;否則結束。
  2. 每次將當前的K組節點的第一個節點放到end_k_node的後面,直到第一個節點為end_k_node為止。
  3. 繼續對下一個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; } };

在這裡插入圖片描述