尾插法,前插法 建立单链表

目录

尾插法正向建立单链表

前插法逆向建立单链表


首先定义一个一个单链表

typedef struct LNode{
	int data;					//数据域 
	struct LNode *next;			//指针域 
}LNode, * LinkList;

用到的typedef关键字的作用 是为一种数据类型声明一个别名;

尾插法正向建立单链表

        尾插法就是一直在链表的末尾追加节点、在追加的节点中写入数据。那么实现这个操作,我们就需要有一个工作节点s来存储数据,还需有一个工作指针用来指向末尾的节点,并且在每插入一个新的节点之后,我们就需要将工作指针指向“新的”末尾的节点,这样才能保证我们一直是在末尾插入数据,好了话不多说我们具体来看实现代码

LinkList List_Tailinsert(LinkList &L){
		L = (LinkList)malloc(sizeof(LinkList));			//生成一个头结点 
		//头结点指针域置空 
		L->next = NULL;
		//怎么办,就是让最后面的节点的指针域指向一个新的节点 新的节点中存放着我们想要插入的数据  这个过程利用循环来反复实现 
		
		//工作指针p,用来指向新节点,并且永远指向最后一个节点 
		LNode* p=L; //初始化指向头结点 
		int x;
		scanf("%d",&x);
		while( x!=100 ){
			//新建一个节点s 当做临时节点 来存放要插入的数据 
			LNode* s = (LNode*)malloc(sizeof(LNode));
			s->data = x;        //在新节点中写入数据
			p->next = s;        //s变为尾结点
			p = s;              //p指向s
			scanf("%d",&x);       //输入数据
		}
		p->next = NULL;          //尾结点的指针域置空
		return L;                //返回L
}

新人入坑,请各位大佬指教

尾插法是一种常用的单链表的插入方法,它利用了链表尾部的指针(通常是尾节点的next指针)来进行插入操作。这样做的好处是插入操作的时间复杂度可以保持在O(1),即常数时间内完成。下面是一个使用C语言实现尾插法建立单链表的简单例子: ```c #include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 typedef struct Node { int data; struct Node *next; } Node; // 创建一个新节点 Node* createNode(int data) { Node *newNode = (Node*)malloc(sizeof(Node)); if (newNode) { newNode->data = data; newNode->next = NULL; } return newNode; } // 尾插法建立单链表 Node* createLinkedListByTailInsertion() { Node *head = NULL, *tail = NULL; // 初始化头指针和尾指针为NULL int data; printf("请输入要插入的数据(输入-1结束):\n"); while (1) { scanf("%d", &data); if (data == -1) { break; } Node *newNode = createNode(data); if (tail == NULL) { // 如果链表为空,则新节点既是头节点也是尾节点 head = newNode; tail = newNode; } else { tail->next = newNode; // 将新节点链接到尾节点的后面 tail = newNode; // 更新尾节点为新节点 } } return head; } // 打印链表 void printList(Node *head) { Node *current = head; while (current != NULL) { printf("%d ", current->data); current = current->next; } printf("\n"); } // 主函数 int main() { Node *list = createLinkedListByTailInsertion(); printf("链表元素为:"); printList(list); // 释放链表内存... return 0; } ``` 在这个例子中,我们首先定义了链表节点的结构体`Node`,然后通过`createNode`函数创建新的节点。`createLinkedListByTailInsertion`函数利用尾插法创建链表,`printList`函数用于打印链表中的所有元素。注意,在实际使用中,需要在程序结束前释放链表占用的内存,以避免内存泄漏。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值