搜索
首页 电脑/网络 程序设计 C/C++

不带头结点的单链表插入函数纠错

  typedef struct node{ ElemType data; struct node * next;}SNode;insert(SNode *head,int i,ElemType x)/*head为第1个结点,i为插到第i个结点之前,x是插入的data值*/{ SNode *p,*q; int j=1; p=(SNode *)malloc(sizeof(SNode)); p->data=x; q=head; while(q && jnext;j++ } if((q==NULL && jnext=q->next;q=p; } else{ p->next=q->next; q->next=p; } return 1;/*插入成功*/ }}我感觉,当i赋给它2(想插入到第2结点之前),且head==NULL(但是表是空表)的情况时有问题,需要的效果应该是插入失败的,但看这函数意思会执行插入到第1结点前;还有当j=i-2成功循环后q==NULL的情况(即第i-1个结点是NULL,即链表只到i-2),如此情况下插入应该也是失败的,但是照此函数运行的话,会做插入第1结点前的操作1。
  首先我想让大家判断下我认为的2个错误情况设想的对不对,如果我设想的不对,稍微详细的说下我这2个情况下的执行步骤;2。如果我说的这2个情况正是如此的话,那这函数该怎么改才能正确无漏洞的判断各种情况。我也知道这问题很搞脑子,献上100分给大家~~希望有人能够详细分析且回答出这个问题,感激万分~~~。
  

全部回答

2009-08-13

0 0
    这样做试试: 先判断并处理插入位置为1的特殊情况,也就是插入的点会成为新的头结点。 再用指针q依次向后,停在第i个位置上,并在i-1的位置上用指针r定位。 接下来,就是在指针r与指针q之间插入新的结点了,这里用指针p指向要插入的新节点。
   最后,如果q一直到了 null,j仍小于i,说明位置参数i过大,插入失败。   int insert(SNode *head,int i,ElemType x) { SNode *p,*q,*r; int j=1; q=head; p=(SNode *)malloc(sizeof(SNode)); p->data=x; /* 特殊情况:插入点为新的头结点 的情况 */ if (i == 1) { p->next = head; /* 新点p的next指向原head */ head = p; /* head指向新点p */ return 1; } /* 依次查找结点以定位,跳出while循环后的状态:j=i,q指向第i个结点 */ while (q->next != null && j next; ++j; } /* 插入操作,q指向第i点,r指向i-1点,p插入在r与q之间 */ if (j == i) { p->next = q; r->next = p; return 1; } return 0; /* q->next一直到null时j仍小于i,插入失败 */ }。
    。

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
C/C++
硬件
电脑装机
程序设计
互联网
操作系统/系统故障
笔记本电脑
反病毒
百度
软件
程序设计
C/C++
VB
数据库
汇编语言
JAVA相关
VC++
C#/.NET
其他编程语言
C/C++
C/C++
举报
举报原因(必选):
取消确定举报