码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode025:Reverse Nodes in k-Group

时间:2015-04-16 14:22:29      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:leetcode   c++   逆转链表   链表   

问题描述

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

If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.

You may not alter the values in the nodes, only nodes itself may be changed.

Only constant memory is allowed.

For 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

问题分析

以k个结点为一组,逆转组内结点后连接起来,是leetcode024的升级版本(k=2)。解题思路比较清晰,先查看是否有足够的结点构成一组,有则逆转,不够则直接连接起来。难点是链表操作的先后复制要清晰,否则容易混乱。下面以链表为12345678,k=2为例说明链表复制的过程(链表逆转逻辑比较简单,这里不提)。
  • ans是最终结果的表头;
  • ans_p负责组间的连接工作;
  • p负责检查是否有k个结点逆转;
  • p1用来记录逆转前的组的表头;
  • q为逆转过程中的表头。

技术分享

代码

//运行时间:<span style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;color:#333333;"><span style="font-size: 14px; line-height: 20px; background-color: rgb(249, 249, 249);">38ms</span></span>
class Solution {
public:
	ListNode *reverseKGroup(ListNode *head, int k) {
		if (!head) return NULL;
		if (k<=1) return head;
		ListNode *ans = NULL;
		ListNode *ans_p = head;
		ListNode *p = head;//前进!
		ListNode *p1;
		ListNode *q = head;
		ListNode *x;
		ListNode *y;
		int count ;
		while (1){
			count = 0;
			p1 = p;
			while (p&&count < k){
				count++;
				p = p->next;
			}
			if (count < k) {
				if (!ans)	ans = p1; 
				else{ ans_p->next = p1; }
				break;
			}
			else{
				x = y = q->next;
				count = 1;
				while (count < k){
					x = x->next;
					y->next = q;
					q = y;
					y = x;
					count++;
				}
				if (!ans) { ans = q; ans_p = p1; }
				else { ans_p->next = q; ans_p = p1; }
				q = p;
			}
			if (!p) break;
		}
		return ans;
	}
};



leetcode025:Reverse Nodes in k-Group

标签:leetcode   c++   逆转链表   链表   

原文地址:http://blog.csdn.net/barry283049/article/details/45073837

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!