【发布时间】:2020-12-25 19:50:33
【问题描述】:
最初,面试官问的问题是反转我很容易解决的链表。
现在他说要反转 K 节点组中的列表。
例如,如果列表是[1,2,3,4,5,6] 和K=4,那么o/p = [4,3,2,1,5,6].。所以我修改了现有的解决方案来实现它,但它仍然使整个列表的输出反转(i.e [6,5,4,3,2,1])。请参阅下面的程序。这可能需要一些小的改变,但我无法弄清楚。任何人都可以帮助解决问题吗?
ListNode *reverseKGroup(ListNode *head, int k)
{
if (k == 0 || k == 1)
return head;
if (head == NULL)
return NULL;
int counter = 0;
ListNode *fastPtr = head;
ListNode *currentPtr = head;
ListNode *nextPtr = NULL;
ListNode *prevPtr = NULL;
while (fastPtr)
{
counter++;
//one chain formed from list, reverse it
if (counter == k)
{
fastPtr = fastPtr->next;
while (counter)
{
nextPtr = currentPtr->next;
currentPtr->next = prevPtr;
prevPtr = currentPtr;
currentPtr = nextPtr;
counter--;
}
//last node
if (currentPtr->next == NULL)
{
currentPtr->next = prevPtr;
prevPtr = currentPtr;
break;
}
}
else
{
fastPtr = fastPtr->next;
}
}
return prevPtr;
}
【问题讨论】:
-
您是否尝试过调试您的程序?或者尝试过用纸笔绘制和重绘列表以及对列表执行的操作?
-
"现在他说要反转K节点组中的列表。例如,如果列表是[1,2,3,4,5,6]并且K=4那么o/p = [4,3,2,1,5,6]。”所以他想让你把前K个节点倒过来,让下一个节点按顺序排列? “在 K 节点组中”听起来像 [1,2,3,4,5,6,7,8,9,10,11,12] 会变成 [9,10,11,12,6,7,8 ,9,1,2,3,4].
-
对我来说,不清楚你想要什么。您只是想反转前 k 个元素吗?
-
@4386427 对每组K个元素,他要反转组,如果最后一组少于K个元素他不会反转。
-
@user2520119 你到底做了什么来从反转列表转变为按组反转它?
标签: c algorithm linked-list reverse singly-linked-list