# B3631 单向链表

image

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
struct Node{ // 使用结构自定义一个链表节点数据类型
	int data; // 数据域
	Node *next; // 指针域
};
Node *head,*p,*r,*tmp; // 定义头指针,节点指针,尾指针,临时节点指针。
int q; // 操作链表的次数
int main(){
	// 初始化第一个节点
	p = new Node; // 新建节点把节点知识赋值给p指针
	p->data=1; // 把1存入p节点
	p->next= NULL; // p节点指针域设为空
	head = p; // 头指针指向p节点
	r = p; // 尾指针也指向p节点
	scanf("%d",&q);
	for(int i=1;i<=q;i++){
		int x;
		scanf("%d",&x); // 输入操作的类别
		if(x==1){// 插入节点,y控制插入位置,n为插入的节点的值
			int y,n;
			scanf("%d%d",&y,&n);
			p = head;// p指针指向头节点
			while(p->data !=y)p=p->next;// 找到值为y的节点
			// 插入
			tmp = new Node; 
			tmp->data = n;
			tmp->next=p->next;
			p->next = tmp;
		}else if(x==2){// 查找节点
			int y;
			scanf("%d",&y);
			p = head;
			while(p->data !=y&&p->next!=NULL)p=p->next;
			if(p->next==NULL){
				printf("0\n");
			}else printf("%d",p->next->data);
		}else if(x==3){// 删除节点
			int y;
			scanf("%d",&y);
			p = head;
			Node *s;
			if(p->data==y){
				s = p;
				head = p->next;
				free(s);
			}else{
				while(p->next->data !=y)p=p->next;
				s = p->next;
				p->next = p->next->next;
				free(s);
			}
			
		}
	}
	return 0;
}

1 条评论

  • @ 6 个月前

    老师,这段代码多余了吧:

    image

    题目的要求是:

    image

    !:image

    如果按照要求来,不可能删除链表头,但可能删除链表尾,所以应该改为:

    image

    整形变量number1相当于y,节点:Dele相当于s

    这是我写的队列和链表代码:

    队列:

    image

    image

    image

    链表:

    image

    image

    image

    image

    • 1