递归法跟压栈法,没想出来,都是copy的大佬的创意,不过看懂了。
ListNode* reverseKGroup(ListNode* head, int k) { // write code here ListNode* newHead = new ListNode(0); ListNode* p = newHead; stack<ListNode *>store; while(true){ ListNode* tmp = head; bool flag = false; for(int i=0;i<k;i++){ if(tmp == NULL){ p->next = head; flag = true; break; } store.push(tmp); tmp = tmp->next; } if(flag){ break; } while(!store.empty()){ p->next = store.top(); p = p->next; store.pop(); } head = tmp; } return newHead->next; } };
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ class Solution { public: /** * * @param head ListNode类 * @param k int整型 * @return ListNode类 */ ListNode* reverseKGroup(ListNode* head, int k) { // write code here ListNode *tail = head; for (int i = 0; i < k; i++) { if(tail == NULL){ return head; } tail = tail->next; } ListNode *newHead = revertList(head, tail); head->next = reverseKGroup(tail, k); return newHead; } ListNode* revertList(ListNode *start,ListNode *end){ ListNode *pre = NULL; ListNode *next = NULL; while(start != end){ next = start->next; start->next = pre; pre = start; start = next; } return pre; } };