2015-03-19 217 views
-2

我在雙向鏈表的末尾插入節點,但輸出只顯示第一個和最後一個元素。在雙向鏈表中末尾插入

void insertend(int y) { 

    // y the element to be inserted<br> 
    // head is declared as global 

    node *ptr=(node*)malloc(sizeof(node)); 
    node *ptr1=head; 
    ptr->info=y; 

    if(head==NULL) { 
     ptr->next=ptr->prev=head; 
     head=ptr; 
    } 
    else { 

     ptr->prev=ptr1; 
     ptr->next=NULL; 
     ptr1->next=ptr; 
     ptr1=ptr; 
    } 

} 
void showtail() { 
    node *ptr=head; 
    while(ptr!=NULL) { 
     printf("%d\n",ptr->info); 
     ptr=ptr->next; 
    } 
} 

這裏有什麼問題?

+0

歡迎來到StackOverflow。請修復格式並向我們展示如何測試您的程序。 – Ilya 2015-03-19 05:03:56

+1

你可以運行一個調試器來解決這種懷疑 – sashas 2015-03-19 05:04:07

+1

,同時發佈你的代碼也顯示你的結構 – Bhuvanesh 2015-03-19 05:20:21

回答

1

嘗試...

if(head==NULL) 
{ 
    ptr->next=ptr->prev=head; 
    head=ptr; 
    } 
else 
{ 
    while(ptr1->next!=NULL) 
    ptr1=ptr1->next; 
    ptr->prev=ptr1; 
    ptr->next=NULL; 
    ptr1->next=ptr; 
    ptr1=ptr; 
    } 

你完全插入到最後一個節點之前遍歷。否則,你必須保持ptr1作爲靜態變量。

1

當你試圖在最後插入的DLL(或)元素SLL,需要traverse upto the end of the list

其他你需要保持上次插入節點的指針。

但是在這段代碼中,您總是在第一個節點之後插入元素,這就是爲什麼您將第一個節點和最後一個節點作爲輸出。