循环链表调试显示函数
Display function of Circular Linked List Debugging
我尝试实现了循环链表,具有插入、删除位置,然后根据位置的变化重复插入或删除等功能。但是,有一种情况是最初列表尚未创建,我想在位置 1 插入。我的程序应该允许这样做,并且应该为上述情况的其他位置提供无效位置。但是,每当我尝试这样做时,它都会在 while 循环显示期间给我分段错误。请帮忙。我的代码是:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
typedef struct node node;
node *head;
int count=0;
void insert(int d,int pos)
{
if((pos==(count+1))||(head==NULL))
{
addnode(d);
}
else
{
if(pos==1)
{
node *newnode = (node *)malloc(sizeof(node));
newnode->data = d;
newnode->next = head;
head = newnode;
tail->next = newnode;
}
else
{
int a = 1;
node *temp = head;
while(a!=(pos-1))
{
temp = temp->next;
a++;
}
node *newnode = (node *)malloc(sizeof(node));
newnode->data = d;
newnode->next = temp->next;
temp->next = newnode;
}
count++;
}
}
void display()
{
node *temp = head;
if(head==NULL)
{
printf("Empty List \n");
return;
}
while(temp->next != head)
{
printf("%d ",temp->data);
temp = temp->next;
}
printf("%d %d\n",temp->data,temp->next->data);
}
当列表为空时,即 head
为 NULL,您的 addnode
不会创建循环列表。
您的代码会将 newnode->next
设置为 NULL(因为 head
为 NULL)但您想要的是 newnode->next = newnode
以获得循环列表。
所以在 addnode
里面你需要:
...
if(head==NULL)
{
head = newnode;
tail = newnode;
newnode->next = newnode;
}
...
或者,您可以将 newnode->next = head;
行移动到 if-else
子句之后。
我尝试实现了循环链表,具有插入、删除位置,然后根据位置的变化重复插入或删除等功能。但是,有一种情况是最初列表尚未创建,我想在位置 1 插入。我的程序应该允许这样做,并且应该为上述情况的其他位置提供无效位置。但是,每当我尝试这样做时,它都会在 while 循环显示期间给我分段错误。请帮忙。我的代码是:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
typedef struct node node;
node *head;
int count=0;
void insert(int d,int pos)
{
if((pos==(count+1))||(head==NULL))
{
addnode(d);
}
else
{
if(pos==1)
{
node *newnode = (node *)malloc(sizeof(node));
newnode->data = d;
newnode->next = head;
head = newnode;
tail->next = newnode;
}
else
{
int a = 1;
node *temp = head;
while(a!=(pos-1))
{
temp = temp->next;
a++;
}
node *newnode = (node *)malloc(sizeof(node));
newnode->data = d;
newnode->next = temp->next;
temp->next = newnode;
}
count++;
}
}
void display()
{
node *temp = head;
if(head==NULL)
{
printf("Empty List \n");
return;
}
while(temp->next != head)
{
printf("%d ",temp->data);
temp = temp->next;
}
printf("%d %d\n",temp->data,temp->next->data);
}
当列表为空时,即 head
为 NULL,您的 addnode
不会创建循环列表。
您的代码会将 newnode->next
设置为 NULL(因为 head
为 NULL)但您想要的是 newnode->next = newnode
以获得循环列表。
所以在 addnode
里面你需要:
...
if(head==NULL)
{
head = newnode;
tail = newnode;
newnode->next = newnode;
}
...
或者,您可以将 newnode->next = head;
行移动到 if-else
子句之后。