数据结构NOJ——05单链表的删除

本文详细探讨了数据结构中的单链表删除操作,从基本概念到具体实现步骤,包括如何定位要删除的节点以及处理边界情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

#include<iostream>
using namespace std;

typedef int ElemType;

typedef struct LNode {
	ElemType data;
	struct LNode* next;
}LNode,*LinkList;

void Create_LinkList(LinkList& L,int n) {
	L = new LNode;
	L->next = NULL;
	LNode* r;
	r = L;
	for (int i = 0; i < n; i++) {
		LNode* p;
		p = new LNode;
		cin >> p->data;
		p->next = NULL;
		r->next = p;
		r = p;
	}
}

void FindSame(LinkList& B, LinkList C,LinkList &L) {
	LNode* p,*q,*temp;
	L = temp = B;//这里要注意L=B,再设指针,不然会改变p->next的值
	p = B->next;
	q = C->next;
	while (p && q) {
		if (p->data == q->data) {
			temp->next = p;
			temp = p;
			p = p->next;  
			q = q->next;
		}
		else if (p->data < q->data)
			p = p->next;
		else
			q = q->next;
	}
}

//这里的关于单链表删除的技巧
void Delect(LinkList B, LinkList& A) {
	LNode* pa, * qa, * pb, * temp;
	qa = A;
	pa = A->next; // pa 为 qa 的直接后继节点
	pb = B->next;
	while (pa && pb) {
		if (pa->data == pb->data) {
			temp = pa;
			pa = pa->next;
			qa->next = pa;
			pb = pb->next;
			free(temp);
		}
		else if (pa->data < pb->data) {
			pa = pa->next;
			qa = qa->next;
		}
		else
			pb = pb->next;
	}
}

void Show(LinkList L) {
	LNode* p;
	p = L->next;
	while (p) {
		cout << p->data << " ";
		p = p->next;
	}
}

void main() {
	LinkList A, B, C,L;
	int a, b, c;
	cin >> a >> b >> c;
	Create_LinkList(A, a);
	Create_LinkList(B, b);
	Create_LinkList(C, c);
	FindSame(B, C,L);
	Delect(L, A);
	Show(A);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值