1、链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,
则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,
若k=4,翻转后4→3→2→1→5→6
*/
ListNode *reverseK(ListNode *head,int k)
{
ListNode *fakehead = new ListNode(0);
ListNode *newhead = fakehead;
ListNode *ptr = head;
ListNode *next;
while (ptr != NULL)
{
next = ptr;
int len = k;
while (len > 0 && next != NULL)
{
next = next->next;
len--;
}
if (len == 0)
{
while (ptr != next)
{
ListNode *tmp = ptr;
ptr = ptr->next;
tmp->next = newhead->next;
newhead->next = tmp;
}
}
else
{
newhead->next = ptr;
break;
}
while (newhead->next != NULL)
{
newhead = newhead->next;
}
}
return fakehead->next;
}
美团网2014校招研发笔试哈尔滨站--链表翻转
最新推荐文章于 2015-05-04 12:53:08 发布