标题:[求助]无头结点的动态单链表上INSERT算法,是否正确?
只看楼主
舞踏祭
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-9-26
 问题点数:0 回复次数:1 
[求助]无头结点的动态单链表上INSERT算法,是否正确?
试写一算法,在 无头结点 的动态单链表上实现线性表操作 INSERT(L, i, b) 见到有个人是这样写的: Status Insert(LinkList &L,int i,int b) {//在无头结点链表L的第i个元素之前插入元素b p = L; q = (LinkList)malloc(sizeof(LNode)); q.data = b; if (i == 1) { q.next = p; L = q; //插入在链表头部 } else { while(--i>1) { p=p->next; } q->next = p->next; p->next = q; //插入在第i个元素的位置 } }//Insert 看不明白,所以我写了一个: Status Insert(LinkList &L,int i,int b) { //在无头结点链表L的第i个元素之前插入元素b if (i <= 0) //位置不合法 { return ERROR; } label = L; new = (LinkList)malloc(sizeof(LNode)); //给新元素结点初始化 new->data = b; new->next = NULL; if (i == 1) //当插入位置在第一个元素之前时 { if (L == NULL) //如果L此时为空表(没有首元结点) { new->next = NULL; label->next = new; } else //如果L此时非空(有首元结点) { new->next = label->next; label->next = new; } } else //当插入位置不在第一个元素前时 { j = 1; //按照1楼的提醒,这儿作了修改 while (lable->next != NULL && j<i-1) { label = label->next; j++; } if (lable->next == NULL && j > i-1) return ERROR; //label已到最后一个数据结点,但不存在第i个元素,则ERROR new->next = label->next; label->next = new; //插入在第i个元素的位置,原结点变为第i+1个 } return(OK); }//Insert 其中, typedef struct LNode { Elemtype data; struct LNode *next; }LNode, *LinkList; 不知道是否两个都正确? 另: 头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针; 头结点是在链表的首元结点之前附设的一个结点;数据域内只放空表标志和表长等信息 首元结点是指链表中存储线性表中第一个数据元素a1的结点。 头指针本身没有数据域,只是一个指针,不具有LNode型结点构造.L是头指针.
搜索更多相关主题的帖子: 结点 INSERT 单链 算法 动态 
2005-09-26 07:29
bnu_sdy
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-11-6
得分:0 

我的感觉是:两个思路都正确,只是第一个不够健壮,楼主的这个更健壮一些。

else //当插入位置不在第一个元素前时
{
j = 1; //按照1楼的提醒,这儿作了修改
while (lable->next != NULL && j<i-1)
{
label = label->next;
j++;
}
if (lable->next == NULL && j > i-1) return ERROR;
//label已到最后一个数据结点,但不存在第i个元素,则ERROR
new->next = label->next;
label->next = new; //插入在第i个元素的位置,原结点变为第i+1个
}
感觉这一段过于累赘,是不是还有更好的写法呢?望高手指点。


2007-04-28 17:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-28683-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.995195 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved