C链接列表插入不起作用和显示功能

时间:2015-08-20 14:07:51

标签: c linked-list

我正在尝试实现链接列表。但不幸的是它无法正常工作。我尝试更改代码。它不起作用。插入函数不起作用,当我调用displaylist()函数时,我也没有看到任何东西。请帮帮我。这是我的代码:

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

typedef struct node {
    int key;
    struct node *next;
} node;

struct node *head, *z, *t;

listinit(void)
{
    head = (struct node *) malloc(sizeof *head);
    z = (struct node *) malloc(sizeof *z);
    head->next = z;
    z->next = z;
}

delnext(struct node *t)
{
   t->next = t->next->next;
}

node *insertafter(int v, struct node *t)
{

    struct node *x;
    x = (struct node *)malloc(sizeof *x);
    x->key = v;
    x->next = t->next;
    t->next = x;
    return x;
};

void displaylist(void)
{
    node *curr = head->next;
    while(curr != z){
        printf("%d -> ", curr->key);
        curr = curr->next;
    }
    printf("\nHappy Coding! :D\n\n");
}

int main(void)
{
    listinit();
    int cmd = 0,val = 0;
    printf("MENU: \n"
           "1. INSERT\n"
           "2. DELETE\n"
           "3. DISPLAY\n");
    printf("OPTION> ");
    scanf("%d",&cmd);
    switch(cmd){
    case 1:
        printf("Please Enter your Key Value >");
        scanf("%d",&val);
        insertafter(val, &head);
        main();
    case 2:
        main();
    case 3:
        displaylist();
        main();
    }
}

1 个答案:

答案 0 :(得分:2)

您的插入功能不起作用,因为您将位置发送到指针。因为该功能只需要指针。

所以改变:

insertafter(val, &head);

To This:

insertafter(val, head);

它会起作用。

第二个问题是你每次都一次又一次地调用main函数会导致listinit()函数被调用并初始化每个指针。所以删除:

 main();

在案例中。并尝试使用这样的东西:

do{
 switch(cmd){
case 1:
    printf("Please Enter your Key Value >");
    scanf("%d",&val);
    insertafter(val, &head);
    break;

case 2:
    break;
case 3:
    displaylist();
    break;
    }while(cmd != 0);

现在应该可以了。 并避免main()函数的递归调用,因为它是一个非常糟糕的编程实践,并导致这样的问题。并在使用switch ... case时使用break语句。

谢谢:)