1.3 单链表的操作

b站笔记(如侵删)

1.单链表的插入操作

在第i个结点之前插入一个元素e。

分析:首先插入e,用一个结点p存放e,结点的next域指向Ai,Ai-1指向结点p

           寻找插入的位置,在第i-1个元素之后插入,考虑空间问题。

            1. p->next  = q->next;

           2. q->next = p;

Stauts ListInsert_L(LinkList &L,int L,ElemType e)
{//在线性链表的第I个元素之前插入一个元素e
p = (LinkList)malloc(sizeof(LNode)); //申请存储空间
if(!p) exit(OVERFLOW); //没有就退出
P->data =e;  //p的数据域赋值
q=L;
j=0;//q 初始化为L,q初始化为0;
while(q && j<i-1){q=q->next;++j;} //第i-1个元素
if(!q||j>i-1) return ERROR;
P ->next= q->next=p;//关键点
return OK;
}//ListInsert_L;

时间复杂度分析:O(n)

练习:1.删除单链表中节点的算法,并分析时间复杂度

           2.单链表的i定位算法,分析时间复杂度

 

LNode *LocateElem_L(LinkList L,ElemTye e)
{
//在L中找到第一个值和e相同的节点,返回其地址,若不存在,返回空值
if(!L)rerurn NULL;
P=L;
while(P && P->data!=e) p = ->next;
return p;
}
时间复杂度:O(n)

2.线性链表的复杂操作(难)

例:将两个有序链表归并为一个新的有序链表。分析:将Lb中的元素插入到La,使其有序。

      分析:pa指向La的第一个元素,Pb指向Lb的第一个元素,找到La中第一个比他小插入

     P记录Pa的前面的元素,Pa总是第一个比Pb当前元素大的哪一个元素,Pa之前的元素才是最后一个比当前元素小的那一个元素,Pb插入到P之后,Pb插入之前首先把插入的元素记录下来,记为q,然后把q插入到P之后,

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值