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
}
4

3 に答える 3

1

関数では、前の最後の要素の次を割り当てることはなく、ptrがnullを指すときにループを停止します。その前に停止する必要があります

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;
}
于 2012-09-28T22:01:43.877 に答える
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;
}
}

linkdList **head代わりにポインタへのポインタとしてポインタヘッドを渡しましたlinkedList *head

于 2012-09-28T22:13:38.137 に答える
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;
 }
于 2012-09-28T22:08:59.857 に答える