
难度:Hard
解题思路:是翻转两个节点链表的延伸。在纸上画图!找出翻转k个节点的链表的方法。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseKGroup(ListNode* head, int k) { // if(head==NULL) return NULL; ListNode* dummy = new ListNode(-1), *cur = dummy; dummy->next = head; while(cur != NULL) { ListNode* first = cur->next, *second = cur; int i = 0; for(; i < k; i++) { if(second->next != NULL) { second = second->next; } else { break; } } if(i != k) break; ListNode* change_node = first; ListNode* change_node_pre = second->next; cur->next = second; for(int j = 0; j < k; j++) //这里用k来判断会方便减少麻烦 { // cout<<"value:"<<change_node->val<<endl; ListNode* change_node_next = change_node->next; change_node->next = change_node_pre; change_node_pre = change_node; change_node = change_node_next; } cur = first; } return dummy->next; } };
|
运行结果:22ms,超过43.06%
近期评论