首页 > 其他分享 >论单向链表有序插入方案

论单向链表有序插入方案

时间:2023-03-22 21:45:50浏览次数:35  
标签:pb 单向 next 链表 插入 pi 节点

0. 思考

单向链表有序插入,插入点分为这样几个地方:

  1. 当前链表为空,被插入节点是第一个节点
  2. 被插入节点作为头结点
  3. 被插入节点在中间
  4. 被插入节点在尾部

那么按照这样的步骤一步步的去实现,需要两个指针,后指针作为比较节点,前指针仅是为了记录位置,便于链表节点在中、尾两处插入。

1. 单指针记录遍历

如果转换一下思路,一前一后两个指针一直是相邻的,那是否不需要前指针记录位置了呢?
若当前情况,不属于空链表和头插入,那我可以用 node->next 节点与被插入节点进行比较,直到 node->next 节点为空

image

2. 抽象合并优化

可以看到链表为空的情况和头插入情况,唯一相差的是:

  • 链表不为空时,被插入节点指向头结点 pi->next = head;
  • 链表为空时,被插入节点指向NULL,那么此时头结点刚刚好也是空,也满足 pi->next = head(NULL);

====> 被插入节点终将都是头结点

  • 中间插入时,被插入节点要指向 pb->next
  • 尾部插入时,被插入节点要指向空,那么此时 pb->next 也为空

====> 将尾结点指向的NULL,看成是一个没有数据域且指针域为空的节点

STU* insert_link(STU* head, STU tmp)
{
    STU* prev = NULL;
    STU* pb = head;
    for(; NULL != pb && pb->num < tmp.num; pb = pb->next)
    {
        prev = pb;
    }

    STU* pi = (STU*)calloc(1, sizeof(STU));
    *pi = tmp;
    pi->next = NULL;

    if(NULL == prev)
    {
        pi->next = head;
        head = pi;
    }
    else
    {
        pi->next = prev->next;
        prev->next = pi;
    }
    return head;
}

标签:pb,单向,next,链表,插入,pi,节点
From: https://www.cnblogs.com/qinghuan190319/p/17245511.html

相关文章

  • day22 打卡235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉
    day22打卡235.二叉搜索树的最近公共祖先701.二叉搜索树中的插入操作450.删除二叉搜索树中的节点235.二叉搜索树的最近公共祖先235题目链接1.递归法。利用二叉搜素......
  • 单链表OJ题解析1
    1.移除链表元素题目链接题目描述 解题思路这道题较好的解法是创建一个新链表,把不等于val的节点链接到一起,然后返回新链表的头结点structListNode*removeEle......
  • 在Latex文章中插入orcid标志
    论文里往往需要在作者名字边上附上ORCID链接。网上中文博客很多方法都是凑出来的,在stackexchange上看到了一个帖子,其实已经有现成的包可以做到了,简洁方便。原文链接:https......
  • 链表操作-leetcode23-删除倒数第几个节点
    给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例1:示例2:输入:head=[1],n=1输出:[]示例3:输入:head=[1,2],n=1输出:[1]提示:链表中结......
  • LeetCode|876. 链表的中间结点
    题目链接:876.链表的中间结点难度简单829收藏分享切换为英文接收动态反馈给你单链表的头结点head,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中......
  • c++链表记录
    ListNode*pre=NULL;//定义一个空节点ListNode*tmp;//定义一个空的临时节点,此时tmp==NULL ListNode*cur=head;//定义一个等于节点head的节点 ListNode*du......
  • 链表知识点
    链表知识点总结链表简介链表:是由一种一个或多个指针域和数据域组成的特殊数据结构链表类型单链表单链表中的指针域指向下一个节点双链表双链表中有两个指针域,一个......
  • 数据结构-->带头双向循环链表--->优化
    好了,各位老铁!!现在开始本期讨论话题:<--头删数据----头插数据-->直接上手代码:头文件“List.h”#include<stdio.h>#inculde<stdlib.h>//扩容函数malloc库#include<asse......
  • algrothm_reverse(algrothm+round)【反转链表】
    ......
  • 在word中插入代码片段——Easy Code Formatter
    word中的插件“EasyCode Formatter”可以对word中的代码进行排班、高亮显示等等。安装之前需要管道word、Excel等,在浏览器中搜索EasyCode Formatter,获取并下载之后,再......