[英]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
,然后循環退出。 這意味着最后一個節點的prev
和next
成員從未反轉。
一旦你意識到這是問題所在,有幾種方法可以糾正它。 我建議更改循環體中語句的順序,以便最后分配給prev
和next
成員。 然后初始化curl
和temp
“提前一步”,它將起作用。
不相關,但是在循環之后,您實際上並不需要將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.