我正在使用 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
但这也没有影响它。谷歌搜索没有任何帮助,在示例程序中,同样的过程似乎有效。