您的位置:首页 > 职场人生

面试中常见链表问题3:旋转链表

2016-06-06 10:18 405 查看
给定一个单链表和一个k值,把链表向右旋转k步,比如说1->2->3->4->5->NULL和k = 2,则返回4->5->1->2->3->NULL。

解析:(1)把链表分割成两部分,前半部的长度为len-k,后半部分的长度为k,其中len为链表测长度。(2)把后一部分链表的尾指针指向前一部分链表的头指针。返回后一部分的首指针即可。
ListNode* rotateRight(ListNode* head, int k)
{
if(head == NULL || head->next == NULL)
return head;
//链表长度
int len = 1;
ListNode *p = head;
while(p->next != NULL)
{
len++;
p = p->next;
}
//尾指针
ListNode *tail = p;
k = k % len;
//把链表分割成两部分,前部分长度
int size = len - k;
if(size == 0 || size == len)
return head;
p = head;
int index = 1;
//获得前半部的尾指针
while(p->next != NULL && index < size)
{
p = p->next;
index++;
}
ListNode *tmp = p->next;
p->next = NULL;
tail->next = head;
head = tmp;
return head;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: