社区讨论

蒟蒻求救单链表

学术版参与者 2已保存回复 14

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
14 条
当前快照
1 份
快照标识符
@mi86an90
此快照首次捕获于
2025/11/21 09:19
4 个月前
此快照最后确认于
2025/11/21 09:51
4 个月前
查看原帖

能看一看哪里出问题了吗

CPP
//头结点是指向第一个元素节点(线性表的基地址)
//若线性链表为空,在不带头结点的情况下,该链表为空 

#include <bits/stdc++.h>
using namespace std;
const int MAXSIZE = 81;

//声明
typedef struct Lnode
{
	int data;
	struct Lnode *next;
}*Slink;
Lnode *p,*q;//指向链表节点的p,q指针 
Slink H;	//指向链表指针H,头指针 

//初始化,时间复杂度为 $ O(1) $
void InitList(Slink &L)
{
	L = new Lnode;
	if(!L) exit(1);//储存空间分配失败,竞赛似乎用不到 
	L->next = NULL;//指向安全位置 
}
//读入,似乎也有问题 
void input(Slink &L)
{
	p = L->next;
	while(cin >> p->data)
	{
		p = p->next;
	}
}
//销毁单链表
//避免内存泄漏 ***
void DestoryList(Slink &L)
{
	while(L)
	{
		p = L;
		L = L->next;
		delete p;
	}
	L = NULL;
}
//取第i个元素的值,问题大大的 
void getelem_1(Slink &L,int i)
{
	  
	int k = 0;
	while(L)
	{
		q = L;
		L = L->next;
		k++;
		if(k == i)
		{
			printf("%d\n",L->data);
			break;
		}
	}
	return;
}
bool getelem_2(Slink L,int pos)
{
	p = L->next;
	int j = 1;
	while(p && j < pos)
	{
		p = p->next;
		++j;
	}
	if(!p || j > pos)
		return false;
	printf("%d\n",p->data);
	return true;
}
//插入一个节点
bool Insert(Slink &L,int pos,int num)
{
	p = L->next;
	Slink s;
	int j = 0;
	s = new Lnode;
	while(p && j < pos-1)
	{
		p = p->next;
		++j;
	}
	//插入 
	if(j == pos)
	{
		s->data = num;
		s->next = p->next;
		p->next = s;
	}
	return true;
}
//输出
void print(Slink &L) 
{
	p = L->next;
	while(p)
	{
		printf("%d ",p->data);
		p = p->next;
	}
}
int main()
{
	freopen("test.in","r",stdin);
	Slink L;
	InitList(L);
	input(L);//input有问题 
	Insert(L,3,9);//在第三个位置插入9 

//	getelem_2(L,6);//i为第i个节点的值 
	
	print(L);
	
	DestoryList(L);
	return 0;
}

回复

14 条回复,欢迎继续交流。

正在加载回复...