您的位置:首页 > 其它

<LeetCode OJ> 61. Rotate List

2016-05-16 09:13 435 查看
Total Accepted: 69038 Total
Submissions: 300765 Difficulty: Medium

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
.

Subscribe to see which companies asked this question

Hide Tags
Linked List Two
Pointers

Hide Similar Problems
(E) Rotate Array

分析:

具体分析见代码,比较简单!

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
//1,首先获取链表的长度,再根据k计算正序的新链表头
//2,建立连接
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(head==NULL || k==0)
return head;
int len=0;
ListNode* pmove=head;
ListNode* pend=NULL;
ListNode* pnewhead=NULL;
//1,获取链表长度
while(pmove)
{
len++;
pend=pmove;//记录尾节点
pmove=pmove->next;
}

//2,找到新头的位置
k=k%len;//取余
if(k==0)
return head;
int nlen=len-k;
pmove=head;
while(--nlen)
pmove=pmove->next;
//3,建立连接
pnewhead=pmove->next;
pmove->next=NULL;
pend->next=head;
return pnewhead;
}
};


注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!

原文地址:http://blog.csdn.net/ebowtang/article/details/51422358

原作者博客:http://blog.csdn.net/ebowtang

本博客LeetCode题解索引:/article/3664871.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: