我正在尝试仅使用两个指针创建一个链表(我查看过的每篇帖子似乎都使用 3,但我对作业的要求是 2(
所以我将从我如何处理这个问题开始。目前,这些值链接为nullptr ->(head(1->2-> ... -> 7->8->nullptr,其中反转的值为1,2,3,4,5,6,7,8
void reverseList(){
ListNode *last = head;
ListNode *current = last->next;
if(current == nullptr) return;
while(current != nullptr){
current->next = last;
last = current;
current = last->next;
}
}
从逻辑上讲,在纸面上,我的循环是有效的,但它在我的 ide 和调试器中是一个无限循环。
我还尝试制作一个循环来检查大小并从末尾开始,其中头部 = 8 和尾部 = 1,但这也没有用。
我还尝试了一种二分搜索方法,在那里我找到了中点并做了 +- 中间并交换,但我也没有办法从 4->3 开始。
我的目标是从 1->2->3->4->5->6->7->8 到 8
->7->6->5->4->3->2->1让它更简单,改为移动head
ptr。
由于您的display()
首先从head
开始。
void reverseList(){
ListNode* current = head->next;
if(current == nullptr) return; // list is empty
head->next = nullptr;
while(current != nullptr) { // have we reached the end of a forward list?
ListNode* next = current->next;
current->next = head; // reverse next pointer to "previous" node
head = current; // move last pointer to "current" node
current = next; // move to "next" node
}
}
当第一次进入循环时,电流指向"2"。然后就会发生这种情况:
- 当前>下一个得到修改(!(到头。
所以列表现在是(头(1->2->(最后==头(1->2->1->2->1 ...您已经创建了一个循环。这就是为什么您的程序永远不会终止的原因。