双链表的插入结点问题~~

jasonvi123 2010-07-31 12:19:37
#include "stdio.h"
#include "stdlib.h"
/*双向链表的存储结构*/
typedef int ElemType;
typedef struct DuLNode{
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode;
typedef DuLNode *DuLinkList;

void InitDul_Node(DuLinkList *LHead){
*LHead = (DuLNode*)malloc(sizeof(DuLNode));
(*LHead)->next = NULL;
(*LHead)->prior = NULL;
(*LHead)->data = 0;
}

DuLNode* CreateDul_Node(ElemType e)//创建双链表中的结点
{
DuLNode *p = (DuLNode*)malloc(sizeof(DuLNode));
p->data = e;
p->prior = NULL;
p->next = NULL;
return p;
}

void ListInsert_DuL(DuLinkList *L,int i,DuLNode *New_node)//双链表插入函数
{
if(NULL == *L){
*L = New_node;
return;
}
DuLNode *p = *L;
int j = 0;
while(j<(i-1)&& p){
p=p->next;
}
New_node->prior = p->prior;
p->prior->next = New_node;
New_node->next = p;
p->next = New_node;
}

void Dul_Traverse(DuLinkList *L){
DuLNode *p = (*L)->next;
while(p){
printf("<--%d-->",p->data);
p = p->next;
}
}

int main()
{
DuLinkList Dul_HeadA=NULL;
InitDul_Node(&Dul_HeadA);
printf("Insert Sample nodes:\n");
ListInsert_DuL(&Dul_HeadA,1,CreateDul_Node(10));
/*int i;
int a[] = {11,54,25,18,36};
for(i=0;i<5;i++){
ListInsert_DuL(&Dul_HeadA,1,CreateDul_Node(a[i]));
}*/
Dul_Traverse(&Dul_HeadA);
return 0;
}
...全文
94 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
DayDayUpCQ 2010-07-31
  • 打赏
  • 举报
回复
调试一下,应该是对NULL指针进行访问出错了
ayw215 2010-07-31
  • 打赏
  • 举报
回复
单步调试啊
jasonvi123 2010-07-31
  • 打赏
  • 举报
回复
问题:编译没有问题,但是运行的时候,确报错,,,应该是在插入函数上有问题,我始终找不到相关的解决方法。。。
fjianjiang 2010-07-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 logiciel 的回复:]
函数ListInsert_DuL中:
New_node->prior = p->prior;
p->prior->next = New_node;
New_node->next = p;
p->next = New_node;
改为:
New_node->next = p->next;
if (p->next)
{
p->next->prior =……
[/Quote]
成功了,看然我写的不是很严谨,,,多谢了 ,也学习一下~!
zzmlake 2010-07-31
  • 打赏
  • 举报
回复
while(j<(i-1)&& p){
p=p->next;
}

这个循环的结束可能是因为p==NULL了
所以循环结束后,要判断p是不是NULL
logiciel 2010-07-31
  • 打赏
  • 举报
回复
函数ListInsert_DuL中:
New_node->prior = p->prior;
p->prior->next = New_node;
New_node->next = p;
p->next = New_node;
改为:
New_node->next = p->next;
if (p->next)
{
p->next->prior = New_node;
}
if (p == *L)
{
p->next = New_node;
New_node->prior = p;
}
else
{
New_node->prior = p->prior;
p->prior->next = New_node;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧