2012-09-28 41 views
0

嗯,首先, 我不得不承認,我真的沒實現鏈表,嗯,真理,我最近沒有使用溫度。我的鏈表實現有什麼問題?

所以我敢肯定,一個非常愚蠢的簡單的錯誤。

那麼(不知道爲什麼 - 但我只是喜歡這個詞), 我試圖刷新一下我的想法,然後我決定實現一些簡單的鏈表。

void addToLast(linkedList* head, int data) { 
    linkedList* ptr = head; // points to ptr 
    while(ptr) /* p ins't null */ ptr = ptr->next; 
    // ptr now is null 
    ptr = (linkedList*)malloc(sizeof(linkedList)); // we have new node 
    if(ptr == NULL) printf("DAFUQ Null\n"); 
    ptr->num = data; 
    ptr->next = NULL; 
// return! 
    return; 
} 

那麼,在每次迭代PTR的值,一些奇怪的原因是NULL。

這好像每當我打電話addToLast功能,PTR保持NULL。

我真的不知道爲什麼 - 任我真的累了,或我只是有一個愚蠢的問題。

嗯,我說 - 我不明白爲什麼PTR保持NULL,

我分配一個新的節點 -

ptr = (linkedList*)malloc(sizeof(linkedList)); // we have new node 

那麼,爲什麼PTR不保存其價值?

主要&打印功能:

void printList(linkedList* list) { 
linkedList* p; 
putchar('['); 
for(p = list;p;) { 
    printf("%d, ",p->num); 
    p = p->next; 
} 
putchar(']'); 

}

int main() { 
    // create list 
    linkedList *root = (linkedList*)malloc(sizeof(linkedList)); 
    root->next = NULL; 
    addToLast(root,0); 
    addToLast(root,5); 
    printList(root); 
    system("pause"); 
    return 0; // blet :o 
} 
+0

linkdList **head代替linkedList *head從開內存泄漏,一點也不重要。你走*下一個指針,直到你到達一個空值,創建一個新節點,並將其分配....呃..無處? – WhozCraig

回答

0

那麼,問題是,列表中的最後一個節點仍然指向NULL。你要保存的最後一個節點:

void addToLast(linkedList* head, int data) { 
    linkedList* ptr = head, *last; // points to ptr 
    while(ptr) /* p ins't null */ { 
     last = ptr; 
     ptr = ptr->next; 
    } 
    // ptr now is null 
    ptr = (linkedList*)malloc(sizeof(linkedList)); // we have new node 
    if(ptr == NULL) printf("DAFUQ Null\n"); 
    ptr->num = data; 
    ptr->next = NULL; 
    last->next = ptr; 
// return! 
    return; 
} 

或類似的

void addToLast(linkedList* head, int data) { 
    linkedList* ptr = head; 
    while(ptr->next) ptr = ptr->next; 
    ptr->next = (linkedList*)malloc(sizeof(linkedList)); // we have new node 
    if(ptr == NULL) printf("DAFUQ Null\n"); 
    ptr->next->num = data; 
    ptr->next->next = NULL; 
} 
+0

非常感謝! – iLoveC

1
在功能

你永遠不分配下一個你以前的最後一個元素,而你阻止了你的循環時,PTR指向空你必須在此之前停止

void addToLast(linkedList* head, int data) { 
    linkedList* ptr = head; // points to ptr 
    linkedList* last= null; // new element 

    last = (linkedList*)malloc(sizeof(linkedList)); // we have new node 
    if(last == NULL) 
     printf("DAFUQ Null\n"); 

    last ->num = data; 
    last ->next = NULL; 

    while(ptr->next!=null) 
     ptr = ptr->next; 

    ptr->next=last; 
} 
+0

那麼這取決於你想要什麼樣的行爲,如果你的頭指針可能是空的,你必須對函數 – Morendo

+0

進行一些修改,這將是我在這一切結束時發佈的impl。我想象一下,他很快就會明白這一點。 – WhozCraig

0
void addToLast(linkedList **head , int data){ 
linkedList *temp, *r; 
temp = *head; 

if(*head == NULL)//list is empty create first node 
{ 
temp = malloc(sizeof(linkedList)); 
temp->num = data; 
temp->next = NULL; 
*head = temp; 
} 
else 
{ 

//go to last node  
while(temp->next!=NULL) 
temp = temp->next; 

//add node at end 
r = malloc(sizeof(linkedList)); 
r->num = data; 
r->next = NULL; 
temp->link = r; 
} 
} 

我剛剛通過指針頭指向指針是