无头结点单链表的插入删除语句

单链表上基本操作的实现——建立,插入,查找,删除,表长。 本文是对单链表的基本操作的学习——包括单链表的建立,删除插入,查找,等等操作。有些操作好将带头结点单链表和不带头结点单链表均都实现了代码复现!值得一看! 阅读详情

已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点。回答下题
1、在P结点后插入S结点的语句序列是

s->next = p->next;//1
p->next = s;//2

如下图所示
在这里插入图片描述
2、在P结点前插入S结点的语句序列是
(1)循序交换数据的情况

  • 先在P结点之后插入S结点
  • 定义一个中间变量将S和P的数据交换
s->next = p->next;
p->next = s;
ElemType tmp = s->data;
s->data = p->data;
p->data = tmp;

(2)不允许交换数据
单链表不能回退,不能获取到P之前的结点,但是我们又得找到P结点之前的结点

Q = P;
P = L;
while(P->next != Q)
{
	P = P->next;
}
	s->next = Q;//s->next = p->next
	P->next = s;

如下图所示:
在这里插入图片描述
3、在表首插入S结点的语句序列是
(1)链表中有数据时

s->next = L;
L = s;

如下图所示:
在这里插入图片描述
(2)链表中无数据时
通过分析,我们发现上面的代码也能处理我们边界的问题。所以链表中无数据时代码依然是

s->next = L;
L = s;

如下图所示:
在这里插入图片描述
4、在表尾插入S结点的语句序列是
(1)链表中有数据

P = L;
while(P->next != NULL)
{
	P = P->next;
}
s->next = P->next;
P->next = s;

如下图所示:
在这里插入图片描述
(2)链表中无元素时

s->next = L;
L = s;

如下图所示:
在这里插入图片描述

带头结点单链表 和 不带头结点单链表的区别 文章目录不带头结点的操作代码①代码②代码③代码④带头结点的操作代码⑤ 下面的代码中,传递链表时,传的是头指针。如果是带头结点的链表,传递链表时,可以传头结点,具体可以看看 C语言实现-线性表的链式存储(单链表) 带头结点单链表 和 不带头结点单链表的区别: 带头结点单链表,在进行插入删除操作时,不需要改变链表头指针。 不带头结点单链表,在进行插入删除操作时,可能会涉及到链表头指针的修改(所以链表作为参数传递时,传递的是头指针的引用,具体可看代码④中head_insert方法中的指针变量带了 阅读详情

相关推荐

无头结点单链表一系列操作

  无头结点单链表的一系列操作 没有头结点的链表,C++实现其初始化,建立,插入删除,查询,计算长度,输出。感觉没有头结点好多操作都变得复杂了那么一丢丢。 目录   无头结点单链表的一系列操作 初始化 建立 查找 插入 删除 计算链表长度 打印链表 初始化 typedef int datatype; struct nodes{ datatype data...

killers_999的博客 3904

数据结构:单链表中在P结点插入S结点

标题:数据结构:在P结点插入S结点 在数据结构的习题中偶然看到了一个题目 已知在单链表中P不是首元结点也不是尾元结点,在P结点插入S结点

艾醒的博客 1万+

数据结构 无头结点单链表

---------------start reading--------------- 前言 头结点是用来标记单链表的一个标志,有些时候我们可以不使用头结点,这时候操作就完全不一样了。 如何建立一个无头结点单链表?不能在头结点的数据域中放数据再变成假的第一个数据节点在进行操作,那是自己骗自己。 在单链表中我们直接头结点进行解引用,但无头结点的链表最初其实就是一个指针,没有指向任何结点,在进行插入...

kira_981019的博客 2530

无表头结点单链表的基本操作

已知L是无表头结点单链表,且P既不是首元结点,也不是尾元结点: 1.在P结点插入S结点 思路:在P结点之后插入结点S,只需要更改P和S结点的指针即可,即原先的P结点的直接后继作为S结点的直接后继,然后S结点变为P结点的直接后继,这两步操作的顺序不可改变 [1]:S->next = P->next; [2]:P->next = S; 2.在P结点插入S结点...

fu_jian_ping的博客 6739

链表知识点(二)【单链表插入操作】

【原理讲解】在p之后要插入一个结点s,首先最开始p->next 为Q,对于单链表插入,首先建后链,后建前链。建后链的过程中,p->next始终未Q。

u012512762的专栏 1805

【期末复习记录】数据结构(更新到查找)

平平无奇的期末复习杂货记录罢了 希望期末顺顺利利 奋斗3周 我要放暑假!!!

weixin_61639349的博客 2053

数据结构相关

一、线性表的链式存储及相关操作 C语言版 二、C语言实现双向链表的基本操作 三、面试题 1.       在一个单链表中p所指结点之前插入一个s (值为e)所指结点时,可执行如下操作: q=head; while (q->next!=p)  q=q->next; s= new  Node;   s->data=e; q->next=     ;    //填空 s->ne

dy_Learning的专栏 1051

【数据结构与算法】单链表插入删除

众所周知,顺序表中的每个结点中只存放数据元素,其优缺点为:优点:可随机存取,存储密度高;缺点:要求大片连续空间,改变容量不方便。而单链表中的每个结点除了存放数据元素外,还要存储指向下一个节点的指针,其优缺点为: 优点:不要求大片连续空间,改变容量方便 缺点:不可随机存取,要耗费一定空间存放指针

一以贯之的努力 不得懈怠的人生 1万+

单链表的创建,插入删除以及查找

链表是一种物理存储单元上非连续、非顺序的存储结构,由一系列结点组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

Lookdrama的博客 4万+

C语言实现单链表创建、删除、查找、插入

本文将详细的介绍C语言单链表的创建、删除、查找、插入以及输出功能一、创建#include<stdio.h> #include<stdlib.h> typedef int ElemType; /*结构体部分*/ typedef struct Node { ElemType data; //数值域 struct Node *next; //指针域 }Li...

qq_36806987的博客 3万+

单链表及循环单链表的建立、查找、插入删除

2.1单链表的建立 1.建立一个带头结点单链表:L={12,13,21,24}。数据元素的值由键盘输入。 2.实验要点及说明 单链表的建立有头插入法和尾插入法。本实验以尾插法为例建立单链表单链表结点结构除了数据域外,只含有一个指针域。注意:头结点的建立方法,新元素的插入的位置及指针的变化。单链表的建立示意图: #include <stdio.h> #include <conio.h> #include <stdlib.h> #define OK 1 #define

xiahuayong的博客 4447

单链表插入删除

在上一篇文章(单链表的定义)中我们已经了解了单链表的含义和简单的实现。那么在这篇文章中,我们将要来讲解单链表插入删除操作。我们在上篇文章中已经讲解过,如果想要在表L中的第i个位置上插入指定元素e,我们需要找到第i-1的结点,在其后插入新的结点。大致步骤如下:当然当我们想在第一位插入结点时,对于带头结点的链表的好处就是,在头部插入数据和其他任意一个位置插入数据的操作是一样的,非常方便。 代码分析(在第一个位置插入结点) 若 i = 1我们直接看函数的内部在进入时首先会判断,i的合法性(i小于1是不合法的

hibugs 6424

数据结构:单向链表的操作

【代码】数据结构:单向链表的操作。

SYF_wdnmd的博客 184

如何实现单链表结点的前插操作?

学过数据结构的小伙伴们都知道,如果想要对单链表进行插入操作,一般都需要寻找到要插入结点的前一个结点进行后插入操作,即 s->next = p->next; //s为插入结点,p为前一个结点 p->next = s; 但是如果要求给定一个结点p,要求在这个结点p之前前插一个结点s该怎么办呢,我们是无法找到结点p之前结点的指针的,所以按照正常的思路是无法进行插入的。 这时我们可以改变思路,偷天换日,巧妙解题,将 结点s 依旧插入 结点p 的之后, 再对结点s和p进行值交换,这样就完成了

西小庄村高伟 的博客 5087

数据结构单链表:指定结点的前插、后插操作

指定结点的前插操作 typedef struct LNode{ int data; struct LNode *next; }LNode, *LinkList; //在p结点之前插入元素e bool InsertPriorNode(LNode *p, int e){ if(p==NULL) return false; LNode *s = (LNode *)malloc(sizeof(LNode)); if(s==NULL)

qq_45562742的博客 4235

2.3不带头结点单链表

InitList(&L):初始化表。构造一个空的线性表L,分配内存空间。 ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。 ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。 LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素。 GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。 其他常用操作: Length(L):求表长。返回线性表L

我走的每一步都算数 3909

【链表——数据结构】

链表

爱学习的小刘芒的博客 2729

【ADT】单链表_不带头结点_插入删除_C

在函数中,参数使用结构,那么该结构内的指针变量指向的内存被修改是否会修改。

m0_62409781的博客 997
上一篇: 【Linux】系统调用和库函数的区别
下一篇: 单链表逆置之两种算法的比较
一把大锤子
博客等级 码龄8年 59粉丝 143原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值