C语言::无头单链表非头节点前插入一个节点 - 高小调博客

C语言::无头单链表非头节点前插入一个节点

编写一个C语言程序要求在无头单链表的一个非头节点前插入一个节点.

算法

因为单链表的单向性,导致它要想插入一个节点,就必须得知道被插入节点的前一个节点的位置.

如果有了上文 删除一个无头单链表的非尾节点 的思维之后,这个问题也就迎刃而解了.

我们只需要:把被新节点插入到被插入位置之后,然后交换节点数据即可.

代码实现

(用到了无头单链表的代码,详见:C语言::实现无头节点的单链表)

#include"SList.h"
/*
*函数功能:无头单链表的非头节点前插入一个节点
*参数说明:pHead,链表头指针;pos,要插入的位置;data,被插入的元素
*返回值:无
*/
void InsertNotHead(PNode pHead, PNode pos, DataType data){
	PNode pNewNode = NULL;
	assert(pHead);
	if(pos==NULL){
		return ;
	}
	//创建一个新节点,值与pos相同
	pNewNode = ByeNode(pos->data);
	if(!pNewNode){
		//节点创建失败
		return ;
	}
	//将新节点插入到pos之后
	pNewNode->next = pos->next;
	pos->next = pNewNode;
	//把pos的值改为被插入元素的值
	pos->data = data;
}
void Test_InsertNotHead(){
	PNode pHead;
	InitList(&pHead);
	PushBack(&pHead,5);
	InsertNotHead(pHead,Find(pHead,5), 4);
	InsertNotHead(pHead,Find(pHead,4), 3);
	InsertNotHead(pHead,Find(pHead,3), 2);
	InsertNotHead(pHead,Find(pHead,2), 1);
	InsertNotHead(pHead,Find(pHead,1), 0);
}
int main(){
	//不要问我为什么没有打印输出
	//我是直接调试看内存的
	//养成不依赖printf函数的好习惯
	//科科~
	Test_InsertNotHead();
	return 0;
}

PS:开学半个多月,原本在瑜伽馆养成规律的生活作息时间完全被打乱!

突然发现已经一周没有进行阿斯汤加练习了

感觉自己苦修了一个多月的身体,慢慢变得没有活力起来....也没以前持久了!(我说的是平板支撑,你们懂的)

一想到自律,一股强烈的意念把我的身体从懒散的状态带回来,马上写个程序先冷静冷静...

上一篇:
下一篇: