链表任意位置插入删除

链表的插入删除主要是要考虑如果为空表,删除第一个等特殊情况,考虑全面。

具体实现如下

c 复制代码
#include<stdlib.h>
#include<stdio.h>
struct Node {
	int data;
	struct Node* next;
};
struct Node* head;
void print()
{
	struct Node* temp = head;
	printf("list is:");
	while (temp != NULL)//遍历操作
	{
		printf(" %d", temp->data);
		temp = temp->next;

	}
	printf("\n");
}
void Insert(int data, int n)
{
	//先创建该结点
	struct Node* temp1 = (struct Node*)malloc(sizeof(struct Node));
	temp1->data = data;
	temp1->next = NULL;
	if (n == 1)//如果插在第一个位置
	{
		temp1->next = head;//空表也可以
		head = temp1;
		return;
	}
	//找到要插入位置的前一个
	struct Node* temp2 = head;
	for (int i = 0; i < n - 2; i++)//移动n-2次
	{
		temp2 = temp2->next;
	}
	//把temp2的位置移到第n-1个位置
	temp1->next = temp2->next;
	temp2->next = temp1;
	return;
}
//delete node
//注意如果想删除的结点位于头结点
//删除后要释放空间
void Delete(int n)//删除第n个位置
{
		struct Node* temp1 = head;
		// if the previous node does not exist
		if (n == 1)
		{
			head = head->next;
			free(temp1);
			return;
		}
		// if the previous node  exists
		for (int i = 0; i < n - 2; i++)//移动n-2次
		{
			temp1 = temp1->next;//temp1 points to(n-1)th Node
		}
		struct Node* temp2 = temp1->next;//准备删除的结点
			temp1->next = temp2->next;
		free(temp2);
}
int main()
{
	head = NULL;//初始化空表
	Insert(2, 1);
	Insert(3, 1);
	Insert(4, 3);
	print();//list is: 3 2 4

	Delete(1);
	print();//list is: 2 4
	Delete(2);
	print();//list is: 2 
	return 0;
}
相关推荐
梦帮科技6 小时前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
hold?fish:palm7 小时前
34 合并K个升序链表
javascript·算法·链表
C++ 老炮儿的技术栈7 小时前
我们在设计tcp协议时,要传一个字符串过去,报文:头十长度十内容,是否要把‘\0‘也填入,长度是否包含‘\0‘
开发语言·数据结构·c++·mfc·c
青山木11 小时前
Hot 100 --- 最长有效括号
java·数据结构·算法·leetcode·动态规划
爱吃苹果的日记本13 小时前
数据结构第五课
数据结构·学习
Logic10114 小时前
C语言/数据结构贪心算法题解:买卖股票的最佳时机——一次交易最大利润(O(n)时间O(1)空间)
c语言·数据结构·贪心算法·数组·时间复杂度·算法题·股票交易
Logic10114 小时前
C语言/数据结构位运算题解:异或XOR找出货币交易中的“独特面值“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
ctlover14 小时前
数据结构:树
数据结构·python
景熙552316 小时前
14.Java 集合框架从入门到源码万字详解(含 ArrayList/LinkedList/HashMap 源码、泛型通配符、红黑树)
java·开发语言·数据结构·算法
SendTomo17 小时前
.ico透明图标在线生成下载平台深度解析
大数据·数据结构·数据库·数据仓库·个人开发