有没有办法在 C 中为链表复制指针?

问题描述 投票:0回答:0

我正在使用 C 实现一个链表,它在头部、尾部(最后一个节点)和第 k 个索引处具有插入功能。但是,当我尝试实现插入功能并尝试在列表中输入超过 1 个条目时,打印元素会进入无限循环。节点和插入函数定义为: `

#include <stdio.h>

struct node{
        int val;
        struct node *next;
    };

struct node * insertathead(struct node * head,int ele,struct node * new){
    new->val=ele;
    new->next=head;
    return new;
}

int main(){
    struct node *head=NULL;
    struct node *tail=NULL;
    int len=0;
    while(1){
        int k=0,k1=0,ele;
        printf("Welcome to linked list interface!\nWhat would you like to do?\n1. Insert\n2. Delete\n3. Print all elements\n4. Exit\n");
        scanf("%d",&k);
        if (k==4){
            break;
        }
        switch(k){
            case 1:
                printf("Where would you like to insert? (Enter 0 or -1 for head or tail resp) : ");
                scanf("%d",&k1);
                if (k1>len){
                    printf("Index Error\n");
                    break;
                }
                printf("Enter the element: ");
                scanf("%d",&ele);
                struct node * k;
                struct node new;
                if (k1==0){
                    head=insertathead(head,ele,&new);
                        }
                len+=1;
                break;

            case 3:
                struct node *k2=head;
                if (len==0){
                    printf("Underflow\n");
                }
                else{
                while(k2!=NULL){
                        printf("\n%d\n",k2->val);
                        k2=k2->next;
                    }
                }
                break;

}

在编译并插入 2 at head 然后 3 at head 然后打印列表时,代码进入打印 3 的无限循环。我怀疑这与将 new.next 分配为 head 然后将 head 更新为是新的地址,但我似乎无法弄清楚如何解决这个问题。

我尝试传递 &*head 而不是 head 以希望复制指针而不影响它的更新,但它仍然导致相同的输出。我也尝试使用

*new.next=*head
但这也没有影响它。谷歌搜索没有任何帮助,在示例程序中,同样的过程似乎有效。

c pointers struct linked-list infinite-loop
© www.soinside.com 2019 - 2024. All rights reserved.