【发布时间】:2018-07-30 13:54:48
【问题描述】:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *rlink;
struct node *llink;
}NODE;
NODE* insert(NODE* header,int info)
{
NODE *new,*temp;
new=(NODE*)malloc(sizeof(NODE));
new->data=info;
new->rlink=NULL;
new->llink=NULL;
if(header->rlink==NULL)
{
header->rlink=new;
new->llink=header;
}
else
{
temp=header->rlink;
header->rlink=new;
new->llink=header;
new->rlink=temp;
temp->llink=new;
}
return header;
}
NODE* delete(NODE* header,int info)
{
NODE *temp,*pred,*succ;
temp=header->rlink;
while(temp!=NULL)
{
while(temp!=NULL&&(temp->data!=info))
{
pred=temp;
temp=temp->rlink;
}
if(temp->rlink!=NULL)
{
temp->rlink->llink=pred;
}
if(temp->llink!=NULL)
{
pred->rlink=temp->rlink;
}
free(temp);
temp=pred->rlink;
}
return header;
}
void main()
{
int ch,info;
NODE* header;
header=(NODE*)malloc(sizeof(NODE));
header->rlink=NULL;
header->llink=NULL;
........
删除功能只有在指定的键位于列表末尾时才能正常工作。
假设如果输入列表是 20 10 20 10 并且指定的键是 10,删除会无缝进行,但如果指定的键是 20,则会出现分段错误。
出了什么问题,我该如何解决?
【问题讨论】:
-
我的建议是从最简单的情况开始,当可行时,增加复杂性。所以,1) 空列表,2) 单项列表,3) 有/没有重复项的双项列表,等等。
-
key 为 20 时,试图删除列表中的第一个条目,可能未定义 pred 的值,这可以解释 seg 错误。也从未使用过 *succ。
标签: c linked-list doubly-linked-list