循环链表删除中的垃圾值
Junk values in deletion of circular linked list
循环链表删除节点的结构和函数如下:
struct node
{
int data;
struct node *next;
};
struct node *head = NULL;
void add(int n)
{
struct node *temp=NULL,*trav=head;
temp = (struct node*)malloc(sizeof(struct node));
temp->data = n;
if(head == NULL)
{
temp->next = temp;
head = temp;
return;
}
while(trav->next!=head)
trav = trav->next;
trav->next = temp;
temp->next = head;
}
void delete(int x)
{
struct node *temp=head,*rem=NULL;
if(head!=NULL)
{
if(head->data==x)
{
while(temp->next!=head)
temp = temp->next;
rem=head;
head = head->next;
temp->next = head;
free(rem);
}
else
{
while(temp->data!=x)
{
rem = temp;
temp = temp->next;
}
rem->next = temp->next;
free(temp);
}
}
else
printf("List is empty");
}
void print()
{
struct node *temp=head;
if(head==NULL)
{
printf("List is empty");
return;
}
printf("\n The List is: ");
do
{
printf(" %d ",temp->data);
temp = temp->next;
}while(temp!=head);
}
主要函数调用如下:
int main(void)
{
add(1);
add(2);
add(3);
add(4);
add(5);
print();
delete(1);
delete(2);
delete(3);
delete(4);
delete(5);
print();
}
输出:
所有节点都被删除,但最后打印出一个垃圾值。我的功能有什么问题?
当你的列表变空时,即你删除了列表中的最后一个元素,你需要设置head = NULL;
。
一个简单的解决方法可能是替换:
void delete(int x)
{
struct node *temp=head,*rem=NULL;
if(head!=NULL)
{
if(head->data==x)
与:
void delete(int x)
{
struct node *temp=head,*rem=NULL;
if(head!=NULL)
{
if(head==head->next && head->data==x)
{
free(head);
head=NULL;
}
else if(head->data==x)
我实际上没有 运行 这个,所以我可能没有涵盖所有情况。
循环链表删除节点的结构和函数如下:
struct node
{
int data;
struct node *next;
};
struct node *head = NULL;
void add(int n)
{
struct node *temp=NULL,*trav=head;
temp = (struct node*)malloc(sizeof(struct node));
temp->data = n;
if(head == NULL)
{
temp->next = temp;
head = temp;
return;
}
while(trav->next!=head)
trav = trav->next;
trav->next = temp;
temp->next = head;
}
void delete(int x)
{
struct node *temp=head,*rem=NULL;
if(head!=NULL)
{
if(head->data==x)
{
while(temp->next!=head)
temp = temp->next;
rem=head;
head = head->next;
temp->next = head;
free(rem);
}
else
{
while(temp->data!=x)
{
rem = temp;
temp = temp->next;
}
rem->next = temp->next;
free(temp);
}
}
else
printf("List is empty");
}
void print()
{
struct node *temp=head;
if(head==NULL)
{
printf("List is empty");
return;
}
printf("\n The List is: ");
do
{
printf(" %d ",temp->data);
temp = temp->next;
}while(temp!=head);
}
主要函数调用如下:
int main(void)
{
add(1);
add(2);
add(3);
add(4);
add(5);
print();
delete(1);
delete(2);
delete(3);
delete(4);
delete(5);
print();
}
输出:
所有节点都被删除,但最后打印出一个垃圾值。我的功能有什么问题?
当你的列表变空时,即你删除了列表中的最后一个元素,你需要设置head = NULL;
。
一个简单的解决方法可能是替换:
void delete(int x)
{
struct node *temp=head,*rem=NULL;
if(head!=NULL)
{
if(head->data==x)
与:
void delete(int x)
{
struct node *temp=head,*rem=NULL;
if(head!=NULL)
{
if(head==head->next && head->data==x)
{
free(head);
head=NULL;
}
else if(head->data==x)
我实际上没有 运行 这个,所以我可能没有涵盖所有情况。