【发布时间】:2013-10-25 01:25:56
【问题描述】:
我已经为这个问题苦苦挣扎了好几个小时。我的目标是仅使用指针对链表进行排序(我不能将链表放入 vec 或数组中然后排序)。我得到了指向列表头节点的指针。我可以在指针上调用的唯一方法是 head->next(下一个节点)和 head->key(存储在节点中的 int 值,用于进行比较)。我一直在过度使用我的白板,并且几乎尝试了所有我能想到的东西。
Node* sort_list(Node* head)
{
Node* tempNode = NULL;
Node* tempHead = head;
Node* tempNext = head->next;
while(tempNext!=NULL) {
if(tempHead->key > tempNext->key) {
tempNode = tempHead;
tempHead = tempNext;
tempNode->next = tempNode->next->next;
tempHead->next = tempNode;
tempNext = tempHead->next;
print_list(tempHead);
}
else {
tempHead = tempHead->next;
tempNext = tempNext->next;
}
}
return head;
}
【问题讨论】:
-
发布您尝试修复的代码。我们不介意读者 - 没有看到您尝试过的内容,就无法提供帮助。
-
你试过什么?你在找人为你写代码吗?
-
code 抱歉,我发帖时忘记粘贴代码了。在过去的 5 个小时里,我尝试了很多事情。如果您批评我的代码,那将非常好,但一般的想法也很有帮助。 print_list 方法接收一个节点并打印出从该节点到列表末尾的节点。
-
请将代码添加到问题中,而不是在评论中作为指向外部网站的链接。
-
您发布的代码看起来更像是冒泡排序的尝试,并且它失去了对节点的跟踪。您应该先解决交换两个相邻元素这个更简单的问题。