注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

HT·生活

123

 
 
 

日志

 
 

ex61 Rotate List  

2015-05-17 20:11:13|  分类: leetcode |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Given a list, rotate the list to the right by k places, where k is non-negative.

For example:
Given 1->2->3->4->5->NULL and k = 2,
return 4->5->1->2->3->NULL.

和ex189 rotate一个思路,还算比较简单的,见c代码。

struct ListNode* rotateRight(struct ListNode* head, int k) {
if (head == NULL|| head->next ==NULL)
return head; //链表是空的或者只有一个元素
struct ListNode*current = NULL, *p = NULL, *tail = NULL;
current = head;
int len = 0;
while (current != NULL)
{
len++;
if (current->next == NULL)
tail = current;
current = current->next;
}
int locate = k%len;
if (locate == 0)
return head; //特殊情况 相当于没有移动
locate = len - locate;
current = head;
int i = 0;
while (i < locate-1)
{
i++;
current = current->next;
}
p = current->next;
current->next = NULL;

tail->next = head;
head = p;

return head;
}


update java versiont 2015/12/7

import ht.ListNode;
public class RotateList {
public ListNode rotateRight(ListNode head, int k) {
return helper(head, k);
}
private ListNode helper(ListNode head, int k) {
if (k <= 0 ||head == null || head.next == null) {
return head;
}
int len = 0;
ListNode current = head, tail = null;
while (current != null) {
len++;
if (current.next == null) {
tail = current;
}
current = current.next;
}
k %= len;
int i = 0;
current = head;
int range = len - k -1;
while (i < range) {
current = current.next;
i++;
}
tail.next = head;
head = current.next;
current.next = null;
return head;
}
}


  评论这张
 
阅读(11)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017