首页 > 编程语言 >设计一个算法删除单链表L(有头节点)中的一个最小值结点

设计一个算法删除单链表L(有头节点)中的一个最小值结点

时间:2024-04-22 21:22:18浏览次数:16  
标签:结点 单链 有头 next 最小值 NULL Lmin 指针

数据结构

链表

笔试题:设计一个算法删除单链表L(有头节点)中的一个最小值结点。

image

/*****************************************************************
*	
*	file name	:	linkedlist.c
*	author	 	:	[email protected]
*	data  	 	:	2024/04/22
*	function	:	删除单链表中的一个最小值结点
*	note	 	:	None
* 	
*  	CopyRight (c)	2024	[email protected] 	All Right Reseverd
*
* ****************************************************************/

/*****************************************************************
*	
*	func name	:	LList_Del
*	function	:	删除单链表中的一个最小值结点
*	retval		:	bool
*	note		:	None
*	author	 	:	[email protected]
*	data  	 	:	2024/04/22
*
* ****************************************************************/

bool LList_Del(LList_t *L)
{
	//创建新的最小值结点和最小值前一个结点的指针,并对新指针进行初始化
	LList_t *Lmin = L;
	LList_t *Lprev = NULL;

	//对链表的头文件的地址进行备份
	LList_t *PL = L;

	//判断首结点的指针域是否为NULL,如果为NULL,则退出循环
	while(PL->next)
	{
		//判断首结点的数据域是否小于最小值结点的数据域
		if (PL->next->data < Lmin->next->data)
		{
			//若首结点的数据域小于最小值结点的数据域,则把首结点的指针域赋值给最小值结点,头结点的指针域赋值给最小值前一个结点
			Lmin = PL->next;
			Lprev = PL;
		}
		//把头结点的直接后继作为新的头结点
		PL = PL->next;
	}

	//判断最小值结点指针域是否等于NULL
	if (NULL != Lmin->next)
	{
		//若最小值结点指针域不等于NULL,则把最小值的指针域赋值给最小值前一个结点的指针域
		Lprev->next = Lmin->next;
		//最小值结点的指针域指向NULL
		Lmin->next = NULL;
		free(Lmin);
		return true;
	}
	//最小值前一个结点的指针域指向NULL
	Lprev->next = NULL;
	free(Lmin);
	return true;

}

标签:结点,单链,有头,next,最小值,NULL,Lmin,指针
From: https://www.cnblogs.com/cwp-home/p/18151574

相关文章

  • 设计一个算法删除单链表L(有头结点)中的一个最小值结点
    设计一个算法删除单链表L(有头结点)中的一个最小值结点/********************************************************************* 函数名称: LList_delatemin* 函数功能:删除单链表L(有头结点)中的一个最小值结点* 函数参数:* @a:*L*@b:*返回......
  • 假设该链表只给出了头指针 head。在不改变链表的前提下,请设计一个尽可能高效的算法,查
    假设该链表只给出了头指针head。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k(k为正整数)个位置上的结点。若查找成功,算法输出该结点的data值,并返回1;否则,只返回0。/********************************************************************* 函数名称......
  • 删除链表中最小的一个结点
    include<stdio.h>include<stdbool.h>include<stdlib.h>//指的是单向链表中的结点有效数据类型,用户可以根据需要进行修改typedefintDataType_t;//构造链表的结点,链表中所有结点的数据类型应该是相同的typedefstructLinkedList{DataType_tdata;//结点......
  • 删除链表中的尾部结点
    删除链表中的尾部结点/********************************************************name:DelTailNode* function:删除链表尾部结点*argument*@head:链表头结点的地址**retval:成功返回1,失败返回0*author:Dazz*......
  • 《渣男代码历险记》第五章:设计一个算法删除单链表L(有头结点)中的一个最小值结点
    为了删除单链表L中的一个最小值结点,我们可以遍历链表,找到最小值结点及其前驱结点,然后修改前驱结点的指针,使其指向最小值结点的下一个结点。以下是算法的解析和代码实现:初始化两个指针pre和cur,分别指向头结点和头结点的下一个结点。初始化一个变量min_val,用于存储当前最小值,将其......
  • 对链表中最小数据项对应的结点删除
    //指的是顺序表中的元素的数据类型,用户可以根据需要进行修改typedefintDataType_t;//构造链表SeqList—_t的结点,结点中包含数据域和指针域,并且所有结点中的数据应该相同typedefstructSeqList{DataType_tData;structSeqList*next;}LinkList_t;//创建......
  • 设计一个算法删除单链表L(有头结点)中的一个最小值结点。
    思路1:定义一个变量=遍历每一个当前地址下面的数据和下一个作比较,谁小把谁的值给这个变量,同时记录这个小值的位置i,依次遍历比较,得到最小值和最小值的结点i的值,然后删除这个结点。思路2:给两个指针,p1,p2开始都指向第一个,然后p2指向下一个地址,和p1下的data作比较,得到的小值的p不动......
  • 树2-二叉树拷贝, 遍历, 计算叶子结点和高度
    树2-二叉树拷贝,遍历,计算叶子结点和高度二叉树结点typedefstructBinaryNode{charch;structBinaryNode*lChild;structBinaryNode*rChild;}BinaryNode;//叶子结点的数量intsum;二叉树遍历前序//递归遍历(前序)voidRecursion(BinaryNode*roo......
  • 链表中环的入口结点
       1.先用快慢指针判断是否存在环2.返回快慢指针相遇的地方,一个指针停留在那里。3.另一个指针回到头节点4.两个节点一起走,每次走一格,再次相遇的地方就是入口节点publicclassSolution{    //判断有没有环,返回相遇的地方    publicListNodehasCycle(ListN......
  • 链表2: 动态单链表
    链表2:动态单链表定义数据结构//定义链表数据结构typedefstructLNode{intdata;structLNode*next;}LNode;初始化链表//初始化链表LNode*Init_LinkList(){//返回头指针//创建头结点LNode*header=(LNode*)malloc(sizeof(LNode));hea......