[英]Reversing Linked List in C
我一直在研究一個代碼來反轉一個鏈表,但我似乎只是在我的列表中打印出第一個元素。 這是我的功能:
void reverseSqueue(Squeue squeue) {
if (squeue -> first == NULL || squeue -> last == NULL){
return;
}
Node* temp = NULL;
Node* curr = squeue -> first;
squeue -> first = squeue -> last;
squeue -> last = curr;
/*if (squeue -> first != squeue -> last){
curr = curr -> next;
}
printf("%s\n", curr -> next -> value);
printf("%s\n", curr -> value);
printf("%s\n", curr -> prev -> value);
printf("______________\n");
printf("%s\n", squeue -> first -> value);
Node* nde = squeue -> first;
while (nde != NULL){
printf("%s\n", nde -> value);
nde = nde -> prev;
}*/
while (curr != NULL){
/*if (curr != squeue -> first || curr != squeue -> last){
if (curr -> next == squeue -> last){
curr = NULL;
}else{*/
temp = curr;
curr -> next = curr;
curr = temp;
curr = curr -> prev;
//}
//}else{
//curr = NULL;
//}
}
}
我為混亂的代碼道歉,我嘗試運行多個測試並在此處注釋掉它們; 我之前的代碼運行良好,但在 OClint 中給出了垃圾值警告,所以我嘗試修復它們,現在我的代碼似乎不再起作用了。 如果沒有其他工作,我可以回到我的原始代碼。 非常感謝任何輸入!
struct node {
char *value;
struct node *next;
struct node *prev;
};
typedef struct node Node;
struct squeue {
struct node* first;
struct node* last;
};
typedef struct squeue * Squeue;
使用 curr->next = curr 你是說當前節點的下一個節點是當前節點,也就是說,當前節點指向自己,因為它是下一個節點。
Node *first = squeue->last;
squeue->last = squeue->first; // the last node is now the first
squeue->first = first; // squeue->first = original order squeue->last
Node *curr = first;
while (curr != NULL) { // loop begins with the original order last node,
// but new order first node
// curr->next, curr->prev = curr->prev, curr->next
Node *prev = curr->prev; // saves the curr's prev
curr->prev = curr->next; // modifies curr's prev, now pointing to curr's next
curr->next = prev; // curr's next now points to it's original prev
curr = curr->next; // the next curr is the original order curr's prev,
// but the now order curr's next
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.