簡體   English   中英

在 c 中反轉雙向鏈表

[英]Reversing doubly linked list in c

我想反轉一個雙向鏈表,但我沒有得到所需的 output 代碼:

typedef struct node {   // structure for linked list
    struct node *prev;  // for previous node
    int data;           // for node data
    struct node *next;  // for next node
}node;

struct node *reverse(node *head){
    node *curl=head,*temp=curl->next;
    while(temp!=NULL){
        curl->next = curl->prev;
        curl->prev = temp;
        curl = temp;
        temp = temp->next;
    }
    head = curl;
    return head;
}

當我打印這個 function 返回的列表時,它只打印原始列表的最后一個節點,僅此而已。

有人可以解釋一下我在這里缺少什么嗎?

function 對除了列表中的最后一個節點之外的所有節點執行這項工作。 curl指向循環體中第三條語句的最后一個節點時,則temp在下一條語句中變為NULL ,然后循環退出。 這意味着最后一個節點的prevnext成員從未反轉。

一旦你意識到這是問題所在,有幾種方法可以糾正它。 我建議更改循環體中語句的順序,以便最后分配給prevnext成員。 然后初始化curltemp “提前一步”,它將起作用。

不相關,但是在循環之后,您實際上並不需要將curl分配給head 您可以只return curl

所以這給了我們這個更正:

struct node *reverse(node *head) {
    node *curl, *temp = head;
    while (temp != NULL) {
        curl = temp;
        temp = temp->next;
        curl->next = curl->prev;
        curl->prev = temp;
    }
    return curl;
}

暫無
暫無

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

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