当前位置:   article > 正文

C语言如何在链表中的指定位置插⼊结点?

C语言如何在链表中的指定位置插⼊结点?

一、问题

        在链表中的指定位置插⼊⼀个结点,要求链表本身必须已按某种规律排好序。如何在链表中的指定位置插⼊新结点,需要掌握怎样找到插⼊的位置以及怎样实现插⼊?

二、解答

        由于链表是链式结构的,因此要插⼊⼀个结点,就先要断开链表,才能将新的结点插⼊。就好⽐幼⼉园的⼩朋友⼿拉⼿排成⼀队,要想将⼀个新来的⼩朋友插⼊队伍⾥,必须在需要插⼊的位置处将两个⼩朋友的⼿松开,然后让前⾯的⼩朋友的⼿拉住新来⼩朋友的⼿,新来⼩朋友的另⼀只⼿再拉住后⾯⼩朋友的⼿,这样就完成了插⼊,形成⼀个新的队列。

(1)按照上⾯的思路,如果在第 i 个位置插⼊⼀个结点,需要找到插⼊的位置。

        使⽤循环语句,从头结点移动指针 p,开始遍历每⼀个结点,找到要插⼊位置的前⼀个结点。循环语句相应代码如下。

  1. p = head;
  2. while (p && j < i - 1)
  3. {
  4. p = p->next;
  5. ++j;
  6. }

        跳出循环后,指针 p 就指向了 i-1 结点的位置。

(2)找到了插⼊的位置,就要实现插⼊操作。

         将要插⼊的结点(即§指向的结点)指向链表中插⼊位置的下⼀个结点。相应代码如下。

S->next = p->next;

        将指针p指向的结点(第i-1个结点)指向要插⼊的新结点(s指向的结点)。代码如下。

p->next = s;

        插⼊新结点的过程如下所示。

 

三、总结

        在插⼊新结点的过程中,必须先给需要插⼊的新结点的数据域赋值,然后将新结点的指针指向指针 p 所指的结点的直接后继,最后再将 p 结点的指针指向新⽣结点 s 。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/598488
推荐阅读
相关标签
  

闽ICP备14008679号