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
.
分析:
具体分析见代码,比较简单!
/**
* 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;
}
};
86 Partition List
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.
For example,
Given 1->4->3->2->5->2
and x = 3,
return 1->2->2->4->3->5
.
分析:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(head==NULL || head->next==NULL)
return head;
ListNode node1(0),node2(0);//看到这里就猛然醒悟!!!草...
ListNode* pleft=&node1;
ListNode* pright=&node2;
while(head)
{
if(head->val < x)
{
pleft->next=head;
pleft=head;
}
else
{
pright->next=head;
pright=head;
}
head=head->next;
}
pleft->next=node2.next;
pright->next=NULL;
return node1.next;
}
};
注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!
原文地址:http://blog.csdn.net/ebowtang/article/details/51422358
原作者博客:http://blog.csdn.net/ebowtang
本博客LeetCode题解索引:http://blog.csdn.net/ebowtang/article/details/50668895