有2個列表source={3,2,1}
和dest ={4,5,6,7}
其中鏈接列表的頭指針分別位於3和4中。刪除源頭節點,將數據3移動到目標列表,並將其作爲目標列表中的新頭節點。鏈接列表:將節點從一個列表移動到另一個列表
所以在第一輪source ={2,1} dest ={3,4,5,6,7}
之後,現在head的源代碼指向2,head代表dest指向3.最後,我必須製作source = NULL and Dest = {1,2,3,4,5,6,7} head => 1
。每次我都可以通過調用移動節點函數來實現。但是當我在一個循環中運行時,它會保持循環。這是錯誤的代碼。請告訴我爲什麼會出現循環問題。
typedef struct node{
int data;
struct node* next;
}Node;
void push(Node** headRef, int data){
Node* newNode = (Node*) malloc(sizeof(newNode));
newNode->data = data;
newNode->next = *headRef;
*headRef = newNode;
}
Node* pushtop(){
Node* head = NULL;
int i;
for(i = 1; i<=3; i++){
push(&head,i);
}
return head;
}
Node* pushbottom(){
Node* head = NULL;
int i;
for(i=7; i>=4; i--){
push(&head,i);
}
return head;
}
void moveNode(Node** source,Node** dest){
Node* ptr = *source;
Node* current = NULL;
while(ptr!=NULL){ // here the continuous looping occurs
current=ptr;
current->next = *dest
*dest = current;
*source = ptr->next;
ptr = ptr->next;
}
Node* test = *dest;
printf("\nthe then moved list is\n\n");
while(test!=NULL){
printf("%d\n",test->data);
test = test->next;
}
}
int main(){
Node* headA = pushtop();
Node* headB = pushbottom();
moveNode(&headA, &headB);
return 0;
}
請檢查移動節點While循環部分。
邏輯上我的代碼必須工作。我錯過了可視化的東西,導致循環。它在Source的頭部和dest頭部之間循環。 – bks4line
你確定不會崩潰嗎?我在移動中看到的第一件事是current = NULL; ptr =當前; ptr-> next = * dest; ---->分段故障<---- –
費爾南多編輯哥們!對不起,錯誤 – bks4line