难以创建链表

时间:2018-01-06 14:02:25

标签: c algorithm linked-list

在这个程序中,当我创建一个列表时,它会成功创建列表。但是当我尝试打印它时,程序只显示节点的最后两个值。我多次调试,发现(*temp)->next更改了start1start2指针。我无法解决temp指针在start1start2中更改值的方式。

编译器没有产生任何错误或警告。

#include <stdio.h>

struct node {
  int info;
  struct node *next;
} *start1 = NULL, *start2 = NULL;
void create_node(struct node **s1);
void display(struct node **s);

void create_node(struct node **s1)
{
  struct node *ptr = NULL, **temp = s1;
  ptr = (struct node *)malloc(sizeof(struct node));
  if (*s1 == NULL)
  {
    *s1 = ptr;
  } else
  {
    while ((*temp)->next != NULL)
      (*temp) = (*temp)->next;
    (*temp)->next = ptr;
  }
  ptr->next = NULL;
  printf("enter the value\n");
  scanf("%d", &(ptr->info));
}
void display(struct node **s)
{
  struct node **temp = s;
  while ((*temp) != NULL)
  {
    printf("%d\t", (*temp)->info);
    (*temp) = (*temp)->next;

  }
}
void main()
{
  int choice = 0;

  while (1){
    clrscr();
    printf("enter your choice\n");
    printf("enter 1 to create_node1\nenter 2 to create node 2 \nenter 3 to display node 1\nenter 4 to display node2\nenter 5 to exit\n");
    printf("\n");
    scanf("%d", &choice);
    switch (choice)
    {
      case 1:
        create_node(&start1);//correct//
        break;
      case 2:
        create_node(&start2);
        break;
      case 3:
        display(&start1);
        getch();
        break;
      case 4:
        display(&start2);
        getch();
        break;
      case 5:
        exit(1);
        break;
      default:
        printf("invalid");
    }
  }
}

1 个答案:

答案 0 :(得分:1)

使用此 while ((*temp)->next != NULL) (*temp) = (*temp)->next;
这样可以解决问题。
否则,将访问内存不足的索引,并且程序崩溃。