C 单向链表排序_单向链表排序java

C 单向链表排序_单向链表排序java链表排序链表排序的两种方式一、交换结点的数据域二、断开链表,重新形成方法示例链表排序的两种方式一、交换结点的数据域有很多种方法,比如冒泡排序,选择排序等其他排序方法structNode*link_sort(structNode*head){ intvalue; structNode*p=head; structNode*q=NULL; while(p) { q=p->next; while(q) { if(p->data&g

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

链表排序的两种方式

一、交换结点的数据域

有很多种方法,比如冒泡排序,选择排序等其他排序方法

struct Node *link_sort(struct Node *head)
{ 
   
	int value;
	struct Node *p = head;
	struct Node *q = NULL;

	while(p)
	{ 
   
		q = p->next;
		while(q)
		{ 
   
			if(p->data > q->data)
			{ 
   
				value = p->data;
				p->data = q->data;
				q->data = value;
			}
			q = q->next;
		}
		p = p->next;
	}

	return head;
}

二、断开链表,重新形成

方法

跟三指针法反转链表类似,也是要定义三个结构体指针。

第一步:
第一个指针用于找最小值
第二个指针用于指向最小值的前一个结点
第三个指针用于遍历链表

第二步:
让最小值从链表当中脱离出来

第三步:
然后再定义一个新的指针,用头插法把指向最小值的指针
形成新的链表,通过调整新链表结点的插入方法和在原链表找最值得到升序或降序的效果。

示例

struct Node *link_sort(struct Node *head)
{ 
   
	struct Node *p = NULL;
	struct Node *pMin = NULL;
	struct Node *pMin_prev = NULL;
	struct Node *newHead = NULL;

	while(head)
	{ 
   
		//找到一个最值结点后,重新操作,原链表的结点个数不断减少
		p = head;
		pMin = head;
		pMin_prev = NULL;

		//1、找最值,遍历原链表
		while(p->next)
		{ 
   
			if(pMin->data > p->next->data) //结点数据域比较
			{ 
   
				pMin_prev = p; //标记
				pMin = p->next;
			}
			p = p->next;
		}
		//2、将最值结点脱离出原链表
		if(pMin == head) //情况一,刚好最值就是头结点
		{ 
   
			head = head->next; //原链表头节点往后移
			pMin->next = NULL; //断开连接,同时防止它乱指
		}
		else
		{ 
   
			pMin_prev->next = pMin->next;//断开结点
			pMin->next = NULL;
		}
		//3、插法入新链表,两种情况
		if(newHead == NULL)
		{ 
   
			newHead = pMin;
		}
		else
		{ 
   
			//头插法
			pMin->next = newHead;
			newHead = pMin;
		}
	}
	
	return newHead;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183186.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • poe交换机跟普通交换机_交换机可以接交换机吗

    poe交换机跟普通交换机_交换机可以接交换机吗POE也被称为基于局域网的供电系统,有时也被简称为以太网供电,这是利用现存标准以太网传输电缆的同时传送数据和电功率的最新标准规范,并保持了与现存以太网系统和用户的兼容性。那么POE交换机和普通交换机之间存在那些不同呢?1.可靠性不同:POE交换机就是支持对网线供电的交换机,和普通交换机相比就是受电终端(比如AP、数字摄像头等)不用再进行电源布线,对整个网络而言可靠性更高。2.功能不同:POE交换机就是除了能提供普通交换机所具有的传输功能,还能给网线的另一端设备提供供电功能。3.优势不同:POE交换机有很多

    2022年10月5日
  • UVA 322 ships (POJ 1138)

    UVA 322 ships (POJ 1138)

    2022年1月24日
  • C++不确定行为

    C++不确定行为

    2022年1月22日
  • ResNet34学习笔记+用pytorch手写实现

    ResNet34学习笔记+用pytorch手写实现看懂ResNet,需要理解两个点:shortcut的处理,以及网络结构理解1——IdentityMappingbyShortcuts(快捷恒等映射)我们每隔几个堆叠层采用残差学习。构建块如图2所示。在本文中我们考虑构建块正式定义为x和y是考虑的层的输入和输出向量。函数F(x,Wi)表示要学习的残差映射。图2中的例子有两层,F=W2σ(W1x)中σ表示ReLU[29],为了…

    2022年10月5日
  • c语言中按位异或的作用,C语言 按位异或实现加法(示例代码)

    c语言中按位异或的作用,C语言 按位异或实现加法(示例代码)/*C语言按位异或实现加法*/#include#include#includevoidtest1(){inta=2;intb=3;intcand=0;intcxor=0;intc=0;//实现c=a+b//1.不考虑进位,按位计算各位累加(用异或实现),得到值xor;cxor=a^b;/*实现说明:a的值是2,对应计算机中补码是0000000000000…

    2022年5月10日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号