首页 > 其他分享 >SWUST OJ 952 单链表插入

SWUST OJ 952 单链表插入

时间:2024-04-02 23:31:49浏览次数:15  
标签:结点 LNode int 952 next Linklist 插入 SWUST OJ

一、 题目

题目描述

建立长度为n的单链表,在第i个结点之前插入数据元素data。

输入

第一行为自然数n,表示链式线性表的长度; 第二行为n个自然数表示链式线性表各元素值; 第三行为指定插入的位置i;第四行为待插入数据元素data。

输出

指定插入位置合法时候,输出插入元素后的链式线性表的所有元素,元素之间用一个空格隔开。输入不合法,输出"error!"。

样例输入

5
1 2 3 4 5
3
6
样例输出

1 2 6 3 4 5

二、代码 

#include<stdio.h>
#include<stdlib.h>


//单链表 带头结点
typedef struct LNode {
	int data;
	struct LNode *next;
} LNode,*Linklist;

//对链表进行初始化 
bool Initlist(Linklist &L) {
	L = (LNode*)malloc(sizeof(LNode)); //分配头结点
	if (L==NULL) return false;
	L->	next = NULL;
	return true;
}

//插入操作 
bool Insertlist(Linklist &L,int m,int e) {
	if(m<1) return false; //插入点 不合法
	int j = 0; //用来记录搜索到的位置
	LNode* p = L;
	while(p!=NULL && j<m-1) {
		p = p->next;
		j++;
	}
	if(p == NULL) return false; //插入位置为空,不合法
	LNode* s = (LNode*)malloc(sizeof(LNode));
	s->data = e;
	s->next = p->next;
	p->next = s;

}


int main() {
	int n  = 0; //单链表长度
	scanf("%d",&n);
	Linklist L;
	int b =0;
	if(Initlist(L)) {
		LNode* g = L;
		for(int i =0; i<n; i++) {
			scanf("%d",&b);
			LNode* newnode = (LNode*)malloc(sizeof(LNode));
			newnode->data = b;
			newnode->next = NULL; //这行代码挺关键的,之前漏了这行代码,运行直接发生了内存泄露 
			g ->next = newnode;
			g = g->next;
		}
	}
	int m,e = 0;
	scanf("%d",&m);
	scanf("%d",&e);
	if(Insertlist(L,m,e)) {
		LNode* q = L;
		for(int i =0; i<n+1; i++) {
			if(q->next!=NULL) {
				printf("%d ",q->next->data);
				q = q->next;
			}
		}

	} else printf("error!");


//释放内存 
	LNode* temp;  
	while (L->next != NULL) {  
	    temp = L->next;  
	    L->next = temp->next;  
	    free(temp);  
	}  
	free(L);
	return 0;
}

三、小tips

1.初始化、插入等操作的函数建议使用布尔类型,这样后续写代码的时候思路更清晰,而且更整洁

2.带头结点和不带头结点的区别:

1)初始化时代码不一样

2)插入、删除、遍历等操作时,不带头结点需要去判断链表是否为空,而带头结点则可以省去这一步。

3.内存泄漏问题:在完成所有操作之后别漏了free()释放内存~

4.Linklist L 与LNode* L的区别:本质上没区别,只是前者表示定义了一个头指针,后者更多的用在底层操作上面;

这可以使代码更清晰~

5.C中应该不支持引用操作(Linklist &L),但我写了没报错...不知道为啥(挠头)

若有纰漏,欢迎指正~~

标签:结点,LNode,int,952,next,Linklist,插入,SWUST,OJ
From: https://blog.csdn.net/C1160793279/article/details/137149023

相关文章

  • DreamOJ D10009
    DreamOJD10009标签DP线段树均摊题意给定一个包含\(n\)个节点根为\(1\)的树,和一个序列\(s\)。如果满足以下两个条件,那么一个包含\(k\)条简单路径的可重集合认为是合法的。这个可重集合中所有的路径都是从根节点\(1\)出发。令\(c_i\)为覆盖节点\(i\)的路径......
  • 洛谷 P8405 [COCI2021-2022#6] Naboj 题解
    题意简述给定一张无向图,每条边有个哨兵,初始在边的中间。你可以把某个结点旁边的哨兵全部吸引或远离这个结点。给出最后每个哨兵在边的哪一端,请构造出一种可能的操作方案或报告无解。多种情况输出任意解,你不需要最小化操作步数。题目分析发现一个哨兵和且仅和最后一次关联这条边......
  • 【数据结构与算法篇】动态顺序表及相关OJ算法题
    【数据结构与算法篇】动态顺序表及相关OJ算法题......
  • 操作系统概念-进程管理-同步互斥camproj
    操作系统概述操作系统定义:能有效的组织和管理系统中的各种软/硬件资源,合理的组织计算机系统工作流程,控制程序的执行,并且向用户提供一个良好的工作环境和友好的接口。操作系统有两个重要的作用:通过资源管理提高计算机系统的效率;改善人机界面向用户提供友好的工作环境。操......
  • BZOJ4977 跳伞求生题解
    传送门题意:有\(n\)个队友和\(m\)个敌人,每个队友\(i\)有\(a_i\)颗子弹。敌人\(j\)有\(b_j\)颗子弹。队友击杀敌人,必须\(a_i>b_j\),然后会获得\(a_i-b_j+w_j\)的收益。(\(w_j\):每个敌人都有一个参数)每个队友只能打一个敌人,可以不打。求最大收益。【费用流模型......
  • CMU15445 2022fall project1
    cmu154452022falllab1BufferPool此project实现一个bufferpool,缓存住磁盘查询的数据。Task1这部分需要我们实现一个可扩展的哈希表,这部分的难点在于插入操作时的分裂,由于Remove不需要我们将目录和桶收缩回去,所以它也很简单。先分析清楚目录和桶的结构。我们可以先实现简......
  • CMU15445 2022fall project4
    CMU154452022fallproject4这个project整体难度稍微高于project3,主要难点在于task1。Task1这部分实现一个锁管理器处理事务对表和行的加锁解锁,是这个project中最复杂的部分。问题:关于为什么在各个隔离级别下,锁要设计成下面这样?REPEATABLE_READ:Thetransactionisr......
  • 最小割问题合集,最大权闭合图,最大密度子图,最小权点覆盖,最大权独立子图,OJ练习,代码详解
    文章目录零、回顾1、流网络的割2、最小割问题一、最小割的应用1.1POJ1966--CableTVNetwork1.1.1原题链接1.1.2思路分析1.1.3AC代码1.2ZOJ2676NetworkWars1.2.1原题链接1.2.2思路分析1.2.3AC代码1.3OPTM-OptimalMarks1.3.1原题链接1.3.2思路分析1.3.3AC代码......
  • 杭电OJ 2084 数塔
    数塔题目明确告诉你,这是一道DP动态规划问题,那么首先先回顾什么是动态规划,就是把原问题分解为多个子问题,再记忆子问题的结果,来降低时间复杂度。观察这个数塔,首先设置一个数组dp[][],令\(dp[j][i]\)表示以第j层的第i个结点为终点的最大和,有以下3种情况:1.边界情况,结点\(i==0\)......
  • 挑战程序设计竞赛 2.6章习题 poj 3421 X-factor Chains
    https://vjudge.net/problem/POJ-3421#author=GPT_zhGivenapositiveintegerX,anX-factorchainoflengthmisasequenceofintegers,1=X0,X1,X2,…,Xm=XsatisfyingXi<Xi+1andXi|Xi+1wherea|bmeansaperfectlydividesintob.Nowwea......