簡體   English   中英

雙鏈表

[英]Doubly Linked List

我一直在試圖弄清楚如何反轉雙向鏈接列表的順序。我最近在hackerrank上建立了帳戶,這是我的第十個問題。 我花了1個小時才弄清楚解決方案(我用筆和紙試了好多次),最后還是以正確的方式通過了。 之后,我看到其他人提交了一些答案,與我的代碼相比,他們的代碼長度很小,或者您認為我的答案還可以。 我沒有人要問,所以我來到這里。 (如果您認為這是一個愚蠢的問題,請原諒我)

    Node Reverse(Node head) {
     Node prevNode = null;
     Node NextNode = null;
     Node m = head;
     Node upComingNode = null;
     Node temp = head;
     if(head == null){
      return head;
  }
    else{
        while(temp!=null){
            NextNode = temp.next;
            temp.next = prevNode;
            m.prev = upComingNode;
            prevNode = temp;
            upComingNode = prevNode.next;
            m = temp;
            temp = NextNode;  
        }
       head = prevNode;
    }
    return head;


}

我不確定您使用的是哪種語言,但是簡單地說,要反轉雙向鏈表,您想為每個節點交換下一個和上一個節點。 這可以很快完成,偽代碼如下:

while(currNode != tail){
    currNode.nextNode = tempNode
    currNode.nextNode = currNode.prevNode
    currNode.prevNode = tempNode
    currNode = currNode.prevNode
}

請注意,我們將下一個節點設置為作為上一個節點進行迭代,因為在進行切換后,上一個節點實際上指向下一個節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM