创建有头结点/无头结点的单链表(c/c++)

复习数据结构,本来题目是删除具有x值的结点,但是不先创建链表,哪来的删呢?所以花了一上午折腾怎么生成无头结点的链表(有头结点书上有)这里就贴出来我struggle出来的成果

  1. 单链表struct
typedef struct LNode
{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;
  1. 创建无头结点的单链表(尾插法)
LNode *CreatList_Nhead()//无头结点,返回指针类型
{
	ElemType x;
	LNode *head;
	LNode *rear;
	LNode *temp;

	head = rear = nullptr;
	cout << "请输入链表的值:" << endl;
	cin >> x;
	while (x != 9999)
	{
		temp = new LNode[sizeof(LNode)];
		temp->data = x;
		if (head == NULL) head = temp;
		else rear->next = temp;
		rear = temp;
		cin >> x;
	}
	rear->next = nullptr;
	return head;
}

或者这样

LinkList List_TailInsert(LinkList &L)//有无头结点的List创建
{
	ElemType x;
	int count = 0;
//	*L = new LinkList[(sizeof(LNode))];
//	L = (LinkList)malloc(sizeof(LNode));//初始化链表
	LNode* s;//每次插入结点的指针
	LNode* r=L;//表尾指针,最初没有给*r赋值,报错了
	cout << "请输入链表的值:" << endl;
	cin >> x;
	while (x != 9999)
	{

		s = new LNode[sizeof(LNode)];
		s->data = x;
		if (count==0) L = s;
		else
			r->next=s;		
			r = s;//将r设为表尾指针
		cin >> x;
		count++;
	}
	r->next = nullptr;
	return L;
}

  1. 创建有头结点的单链表
LinkList List_TailInsert(LinkList &L)//有无头结点的List创建
{
	ElemType x;
	int count = 0;
//	*L = new LinkList[(sizeof(LNode))];
	L = (LinkList)malloc(sizeof(LNode));//初始化链表
	LNode* s;//每次插入结点的指针
	LNode* r=L;//表尾指针,最初没有给*r赋值,报错了
	cout << "请输入链表的值:" << endl;
	cin >> x;
	while (x != 9999)
	{

		s = new LNode[sizeof(LNode)];
		s->data = x;
		r->next=s;		
		r = s;//将r设为表尾指针
		cin >> x;
		count++;
	}
	r->next = nullptr;
	return L;
}

4.主函数(输出无头结点的,注释部分while是生成有头结点的)

int main()
{
	LinkList L;//用于存储变量地址的指针,也就是说LNode* L等价于LinkList L
	L= List_TailInsert(L);
//	L = CreatList_Nhead();
	cout << "链表输出:" << endl;
/*
	while (L->next!= NULL)//指向首结点,之后再next
	{
		cout << L->next->data << " ";//L是有头结点的,L->next才是头指针
		L = L->next;
	}
	*/
	while (L!=nullptr)//指向首结点,之后再next
	{
		cout << L->data<<" ";//L是有头结点的,L->next才是头指针
		L = L->next;
	}
	return 0;
}

总结

  • 感觉最使我困惑的就是定义类的时候
typedef struct LNode
{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;

其中在main中,初始化L时,LNode* L等价于LinkList L,然后传入的是指针变量L

  • 还有就是指针和引用作为函数参数的联系
    引用:是另一变量的别名,通过引用名于与通过被引用的变量来访问变量的效果是一样的
    所以形参是引用的话,就是对实参的操作

值传递、引用传递: 这里讲得很清楚

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页