用2个指针反转链接列表

时间:2018-05-02 05:01:52

标签: c++ pointers linked-list

我正在尝试仅使用两个指针创建链接列表(我查看的每个帖子似乎都使用了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

2 个答案:

答案 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'。然后发生这种情况:

  • current->接下来得到修改(!)到头。

所以列表现在是(头)1-> 2->(last == head)1-> 2-> 1-> 2-> 1 ...你创建了一个环。这就是你的程序永远不会终止的原因。