我正在尝试仅使用两个指针创建链接列表(我查看的每个帖子似乎都使用了3个,但我对作业的要求是2)
所以我将从接近这一点开始。目前,这些值被链接为nullptr - > (头)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和调试器中是一个无限循环。
我也试过制作一个循环来检查大小并从最后开始,其中head = 8和tail = 1但是这也没有用。
我还尝试了二元搜索方法,我找到了中间点并做了+ - mid并交换了,但我也无法从4> 3开始。
我的目标是从1-> 2-> 3-> 4-> 5-> 6-> 7-> 8到8-> 7-> 6 - 将5-将4-> 3→2→1
答案 0 :(得分:2)
更简单,改为移动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
}
}
答案 1 :(得分:0)
第一次进入循环时,当前指向'2'。然后发生这种情况:
所以列表现在是(头)1-> 2->(last == head)1-> 2-> 1-> 2-> 1 ...你创建了一个环。这就是你的程序永远不会终止的原因。