鱼C论坛

 找回密码
 立即注册
查看: 2879|回复: 2

关于链表的插入,我感觉我写的好复杂,请教一下优化办法

[复制链接]
发表于 2020-7-29 13:07:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. void insert_Linked(list* head, int pos, int x)
  2. {
  3.         list* temp = head->next;
  4.         list* node = NULL;
  5.         node = initial_data(node);

  6.         if (pos <= 0 || pos >= head->length)        //判断插入位置非法自动插入最后一个
  7.         {
  8.                 printf("插入到最后一个元素!");
  9.                 while (temp != NULL && temp->next != NULL)
  10.                 {
  11.                         temp = temp->next;
  12.                 }
  13.                 node->data = x;
  14.                 temp->next = node;
  15.                 head->length++;                //长度++
  16.                 return;
  17.         }

  18.         if (pos == 1)        // 判断插入位置是1的情况
  19.         {
  20.                 node->data = x;
  21.                 head->next = node;
  22.                 node->next = temp;
  23.                 head->length++;
  24.                 return;
  25.         }

  26.         int i = 1;
  27.         while (i<pos-1 && temp != NULL)        //判断循环次数且表不为空
  28.         {
  29.                 temp = temp->next;
  30.                 i++;
  31.         }
  32.         node->data = x;
  33.         node->next = temp->next;
  34.         temp->next = node;
  35.         head->length++;

  36.         return;
  37. }
复制代码


我发现我要把插入到第一个的写个判断,插入位置非法自动插入到表尾又一个判断,最后才是插入正常位置,有没有办法合并优化一下~~~以上代码是自己理解范围内写的,插入是没有问题了,但是总感觉太长了好业余,希望各位大神们如果帮忙的话,记得打上注释我新手好理解!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-22 11:21:14 | 显示全部楼层
bool ListInsert(LinkNode*& L, int i, ElemType e)
{
        int j = 0;
        LinkNode* p = L, * s;
        if (i <= 0) return false;
        while (j < i - 1 && p != NULL)
        {
                j++;
                p = p->next;
        }       
        if (p == NULL)
                return false;
        else
        {
                s = (LinkNode*)malloc(sizeof(LinkNode));
                s->data = e;
                s->next = p->next;
                p->next = s;
                return true;
        }

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-22 11:22:40 | 显示全部楼层
先找到插入的前一个结点,判断插入的结点是否为空,然后就直接插入就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 15:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表