编程导航算法通关村第一关|青铜教程 | 链表插入

单链表插入操作常考虑三种情况:首部,中间,尾部

1.在链表表头插入

①要创建一个新结点newNode

②让新结点的指针指向头结点,即newNode->next=head;

③接着head不要给扔掉了,要记得回到首部的位置,即head=newNode;

 

2.在链表中间插入

①同样先创建个新结点newNode

②然后要确定插入的位置,找到需要插入的结点的前驱结点,可以通过判断前驱结点的后继结点是否为要插入的值来找到要插入的位置。如下图cur->next=node(7)时候表示找到插入位置,此时cur->val=15。

③改变指针指向。先让新节点指向要插入的结点,newNode->next=node(15)->next,再让新节点与前驱结点连接,node(15)->next=newNode。

注意先后指针指向顺序不能颠倒,因为链表中能够一个结点只有一个后继结点,如果先node(15)->next=newNode,就不能找到要插入的结点,也就不能连接上该结点了

image.png

 3.在链表尾部插入

同理,找到尾部元素后,将尾部结点指向新节点,要记得新节点指向null,newNode->next=NULL

image.png

 

综上,单链表插入插入的方法如下

//链表插入
struct ListNode* insertNode(struct ListNode* head,struct ListNode* nodeInsert,int pos)
{
   //待插入的结点是链表的头结点
   if(head==NULL)
   {
      return nodeInsert;
   }
   //获取链表长度
   int size=getLength(head);
   //插入位置不合理
   if(pos>size+1||pos<1)
   {
      cout<<"位置参数越界"<<endl;
      return head;
   }
   //插入节点到头部
   if(pos==1)
   {
      nodeInsert->next=head;
      head=nodeInsert;
      return head;
   }

   struct ListNode* node=head;
   int count=1;
   //找到要插入的位置的前驱结点
   while(count<pos-1)
   {
      node=node->next;
      count++;
   }
   //注意顺序不要搞反
   nodeInsert->next=node->next;
   node->next=nodeInsert;
   return head;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值