链表操作—C语言

一、结构体创建

	typedef int DataType; // 设置数据的类型;
	typedef struct Node{  // 单链表结构;
		DataType data;	  // 保存数据,使用设置的类型;
		struct Node *next;// 保存下一个节点;
	}node;

二、链表的创建

	// 创建单链表,使用传入的数组的数据;
	// 有头节点的数据;
	node* create_list(node *head,DataType *datas,int length)
	{
		node *new_node,*ptr = head;
		for(int i=0;i<length;i++)
		{
			// 为新创建的节点,开辟资源;
			new_node = (struct Node*)malloc(sizeof(node));
			new_node->data = datas[i];
			ptr->next = new_node;
			ptr = ptr->next;
		}
	}

三、链表的基本操作

## 1.链表的输出
	void shows(node *ptr)
	{
		ptr = ptr->next; //因为没有头节点,去除;
		while(ptr)
		{
			printf("%d\t",ptr->data);
			ptr = ptr->next;
		}
		printf("\n");
	}
## 2.链表的转置
	node* reverse(node *head)
	{
		node *ptr,*before,*after;
		ptr = head;
		before = after = (struct Node*)malloc(sizeof(node));
		while(ptr)
		{
			before = after;
			after = ptr;
			ptr = ptr->next;
			after->next = before;
		}		
		return after;
	}
## 3. 链表A和链表B连接
	node* merge(node *A,node *B)
	{
		node *ptr = A;
		while(ptr->next)
		{
			ptr = ptr->next;
		}
		ptr->next = B->next; // 去除B的头节点并和A的尾部节点连接;
	}
## 4. 链表交集,A = A∩B;
	node* unique(node *A,node *B){
		// 设置 A的虚指针ptr1,B的虚指针ptr2,C的虚指针ptr3
		// 设置 保存交集节点的C,保存新加入C的节点new_node;
		node *ptr1,*ptr2,*ptr3,*C,*new_node;
		C = (struct Node*)malloc(sizeof(node)); // 对C分配资源;
		ptr1 = A; // 虚指针ptr1指向A;
		ptr3 = C; // 虚指针ptr3指向C;
		// 遍历A的虚指针ptr1
		while(ptr1)
		{
			ptr2 = B; // 虚指针ptr2指向B;
			// 遍历虚指针ptr2
			while(ptr2){
				// 核心:主要通过判断两个链表中相同的节点,并通过虚指针ptr3将新节点加入C;
				while(ptr1->data == ptr2->data){
					new_node = (struct Node*)malloc(sizeof(node));//新节点分配资源;
					new_node->data = ptr1->data;
					// 利用的循转单链表的方法
					ptr3->next = new_node;
					// 可以写成 ptr3 = ptr3->next,则采用单链表,不利于使用其他操作;
					ptr3 = new_node;
					break;
				}
				ptr2 = ptr2->next;
			}
			ptr1 = ptr1->next;
		}
		return C; // 返回指针C;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值