回 帖 发 新 帖 刷新版面

主题:求教 关于单链表插入算法的问题

求单链表完整插入算法 考虑各种情况: "当链表为空时 
在头部插入 在中间插入 在尾部插入" 

小弟是菜鸟 谢谢各位大虾指点

回复列表 (共3个回复)

沙发

这种通用的算法,,head为头指针指向第一个接点:
insert(p,head){
if (head) head=p;//为空的情况
else if(head->next) head->next=p;//只有一个接点
else
 ..................//这里就是超过两个接点,先找到你要插的位置q,
}  
如果你要插在结尾的话,就容易,先找到最后一个接点:
insert(head,p)
{
 while(){查找/}//为空也适应这个算法
  这里插入;
}

板凳

template <class T>
void list<T>::insertFromHead(T el)
{head=new node(el,head);//node构造函数定义为node(T el ,node*ptr=0)
if(tail==0) tail=head;
}

template <class T>
void list<T>::insertFromTail(T el)
{if(head==0)  tail=tail->next=new node(el);
else head=tail=new node(el);

}

3 楼

一种较好的办法,给链表补一个额外的头部.
这样一来插入就减少判断头部和尾部是否为空.
把它当中间插入一样对待.

我来回复

您尚未登录,请登录后再回复。点此登录或注册