xiaopangtou123 2016-05-21 07:54 采纳率: 28.6%
浏览 1182

链表相关问题。。1是删除,当删除头节点的时候,会出现死循环 2插入代码写好,但是没有实现插入的功能

int main()
{
int i = 0;
int place = 0;
int nodeData;
char c;
struct Link *head = NULL;//指向链表头
printf("Do you want to append a new node(Y/N)");
scanf(" %c",&c);
while(c=='Y' || c=='y')
{
head = AppendNode(head);
DispLink(head);//显示当前各节点信息
printf("Do you want to append a new node(Y/N)");
scanf(" %c",&c);
i++;
}
printf("%d new nodes have been appended!\n",i);
printf("please input the nodeData you want to delete:");
scanf("%d",&nodeData);
DeleteNode(head,nodeData);
DispLink(head);
printf("please input the nodeData you want to insert:");
scanf("%d",&nodeData);
printf("输入插入的位置");
scanf("%d",&place);
InsertNode01(head,nodeData,place);
DispLink(head);
//InsertNode(head,nodeData);

//DeleteMemory(head);//释放分配内存
return 0;

}


struct Link *DeleteNode(struct Link *head,int nodeData)//链表的删除
{
struct Link *p = head,*pr = head;
if (head == NULL)//首先需要判断链表是否为空!若空!无需执行删除操作!
{
printf("No Linked Table!\n");
return(head);
}
while(nodeData != p->data && p->next != NULL)//若没找到nodeData且未到表尾,则继续找!
{
pr = p;
p = p->next;
}
if (nodeData == p->data)
{
if(p == head)//判断是否删除首节点
{
head = p->next;//
}
else
{
pr->next = p->next;
}
free(p);
}
else
{
printf("this Node has not been found!");
}
return head;


struct Link *InsertNode01(struct Link *head,int nodeData,int i)
{ int j=1;

struct Link *pr = head, *p, *temp = NULL;
p = (struct Link *)malloc(sizeof(struct Link));
if(p == NULL)
{
printf("NO enough memory");
exit(0);
}
p->next = NULL;//置新节点的指针域为空
p->data = nodeData;//为新节点赋数据域的值
if(head == NULL)//插入新节点前,对原链表的一个判断,不同情况插入的方法不同
{
head = p;
}
else
{ if(i = 1)
{
p->next = head;
head = p;

    }
    else
    {  while(j < i && pr->next != NULL)
       {
           temp = pr;
           pr = pr->next;
           j++;
       }
       if(j = i)
       {
            pr = temp;
            p->next = pr->next;
            pr->next = p;
       }
       else
       {
           pr -> next = p;
       }

    }

}

return(head);

};


图片说明
图片说明

  • 写回答

1条回答 默认 最新

  • goodcrony 2016-05-21 08:30
    关注

    DeleteNode(head,nodeData);
    DispLink(head);

    删除头后,头指针没有移动,在disp还是删除的头的信息。

    InsertNode01(head,nodeData,place);
    DispLink(head);
    中间位置应该可以插入成功,但是头还是有没有指向新的头。

    评论

报告相同问题?

悬赏问题

  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥20 为什么我写出来的绘图程序是这样的,有没有lao哥改一下
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号