leetcode之Reverse Nodes in k-Group

题目:

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.

k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.

Example:

Given this linked list: 1->2->3->4->5

For k = 2, you should return: 2->1->4->3->5

For k = 3, you should return: 3->2->1->4->5

Note:

  • Only constant extra memory is allowed.
  • You may not alter the values in the list's nodes, only nodes itself may be changed.

代码:

class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
        if (!head)return NULL;
	if (!head->next)return head;

	ListNode* first=new ListNode(-1);
	first->next = head;
	ListNode* p = head;
	int t = 0;
	while (p) {
		t++;
		p = p->next;
	}
	int times = t / k;
	ListNode* current = NULL;
	ListNode* q = head;

	int i = 0;
	
	while ((times--)>0) {
		int m = k;
		while ((--m)>0) {

			if (i == 0) {
				ListNode* m = q->next;
				q->next = m->next;
				m->next = first->next;
				first->next = m;
			}
			else {
				ListNode* m = q->next;
				q->next = m->next;
				m->next = current->next;
				current->next = m;
			}
		}
		current = q;
		q = current->next;
		++i;
	}

	return first->next;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_35455503/article/details/82989390
今日推荐