В связанном списке, когда я пишу (temp-> next = newnode), то когда я применяю temp = temp-> next не работает, но работает temp = newnode? - PullRequest
1 голос
/ 14 февраля 2020

Ниже мой код:

#include <stdio.h>
#include <stdlib.h>

int main() {
    struct node {
        int data;
        struct node *next;
    };
    int choice;
    struct node *head, *newnode, *temp;
    head = 0;
    while (choice) {
        newnode = (struct node *)malloc(sizeof(struct node));
        printf("enter items ");
        scanf("%d", &newnode->data);
        newnode->next = 0;
        if (head == 0) {
            head = temp = newnode;
        } else
            temp->next = newnode;  /** **this is the problem** **/
            temp = newnode;      /** temp=newnode works but temp=temp->next doesn't**/
        printf("do you want to continue");
        scanf("%d", &choice);
    }
    temp = head;
    while (temp != 0) {
        printf("list is %d \n", temp->data);
        temp = temp->next;
    }
}

1 Ответ

0 голосов
/ 20 февраля 2020

Проблема здесь:

    if(head==0)
    {
        head=temp=newnode;
    }
    else
        temp->next=newnode;  /** **this is the problem** **/
        temp=newnode;      /** temp=newnode works but temp=temp->next doesn't**/

Отступ не определяет структуру. Вы должны заключить несколько инструкций в блок, чтобы сгруппировать их в предложении else. Как закодировано, temp=newnode; выполняется безоговорочно после теста, что не является проблемой, но избыточно при head=temp=newnode.

. Обратите также внимание, что choice не инициализируется при первом тестировании.

Вот исправленная версия:

#include <stdio.h>
#include <stdlib.h>

int main() {
    struct node {
        int data;
        struct node *next;
    };
    int choice;
    struct node *head, *tail, *newnode, *temp;
    head = tail = NULL;
    for (;;) {
        newnode = (struct node *)malloc(sizeof(struct node));
        if (newnode == NULL)
            break;
        printf("enter item: ");
        if (scanf("%d", &newnode->data) != 1) {
            free(nownode);
            break;
        }
        newnode->next = NULL;
        if (head == NULL) {
            head = newnode;
        } else {
            tail->next = newnode;
        }
        tail = newnode;
        printf("do you want to continue? [0/1] ");
        if (scanf("%d", &choice) != 1 || choice == 0)
            break;
    }
    for (temp = head; temp != NULL; temp = temp->next) {
        printf("list is %d \n", temp->data);
    }
    return NULL;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...