leetcode_reverse_nodes_in_k_group 发表于 2016-11-29 难度:Hard 解题思路:是翻转两个节点链表的延伸。在纸上画图!找出翻转k个节点的链表的方法。 代码如下: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647/** * 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%