2013-07-31 287 views
0

這是我的計劃是怎樣,但它不打印的完整列表從而進入last.I不明白什麼是連接或沒有問題的唯一節點的數據:的單清單打印錯誤

基本結構節點

struct node 
    { 
     int data; 
     struct node *link; 
    }; 

定義標題作爲鏈接列表的開始:

用於插入
struct node *header; 

功能和打印:

void insertFront_sl(); 
    void print_sl(); 

主要功能:列表的

void main() 
    { 
    clrscr(); 
    header=(struct node *)malloc(sizeof(struct node)); 
    header->link=NULL; 
    header->data=NULL; 
    insertFront_sl(); 
    insertFront_sl(); 
    insertFront_sl(); 
    insertFront_sl(); 
    print_sl(); 
    getch(); 
    } 


    void insertFront_sl(){ 
    struct node *temp; 
    int x; 
    temp=(struct node *)malloc(sizeof(struct node)); 
    if(temp==NULL) 
    { 
    printf("\nMeM0rY Insufficient .."); 
    } 
    else 
    { 
     printf("\nGot New Node \nNow Insert Data Into Node : "); 
    scanf("%d",&x); 


    temp->data=x; 
    header->link=temp; 


    } 

    } 

    void print_sl(){ 
    struct node *ptr; 
    ptr=header; 
    while(ptr->link !=NULL) 
    { 
     ptr=ptr->link; 
     printf("%d\t",ptr->data); 
    } 


    } 
+0

你能顯示它打印的輸出嗎? –

+1

你從來沒有設置'temp-> link' –

+0

'insertNode_sl()'是有問題的,它不需要更新'header'(可能只有當header-> link爲NULL時,只有在你第一次插入節點時)。但請縮進您的代碼,以便閱讀。代碼中還有其他設計問題,但這不在此範圍之內。 –

回答

1

每次創建新節點時,都會丟失對先前創建的節點的引用。 在添加新節點:

header->link=temp; 

需要在列表的頭部設置到新節點:

header = temp; 

你也應該保持一個節點來的基本參考列表(第一個節點),並使用此基礎作爲打印列表的起點。

+0

temp-> link = header-> link; temp-> data = x; header-> link = temp; –

2

header->link=temp;丟棄該尾。它應該是:

temp->link = header; 
header = temp; 
+0

終於找到了解決辦法: –

0

這是我的計劃是怎樣,但它不打印的完整列表從而進入最後只剩節點的數據。

header->link=temp; 

的問題是,你一直在增加新的元素到當前節點本身。您正在丟失對之前添加的節點的引用並導致內存泄漏。

0

問題在於鏈接。每次插入時,都會使標題節點中的指針指向最新的鏈接,它將覆蓋舊的指針值(指向前一個新鏈接)。相反,您需要確保在將標題引用到temp之前將temp-> link設置爲之前的「new」鏈接。