前驱后继(线性结构)

题目描述

在双向链表中,A有一个指针指向了后继节点B,同时,B又有一个指向前驱节点A的指针。这样不仅能从链表头节点的位置遍历整个链表所有节点,也能从链表尾节点开始遍历所有节点。

对于给定的一列数据,按照给定的顺序建立双向链表,按照关键字找到相应节点,输出此节点的前驱节点关键字及后继节点关键字。

输入

第一行两个正整数n(代表节点个数),m(代表要找的关键字的个数)。

接下来输入n个整数为关键字key(数据保证关键字在数列中没有重复)。

接下来有m个要查找的关键字,每个占一行。

输出

对给定的每个关键字,输出此关键字前驱节点关键字和后继节点关键字。如果给定的关键字没有前驱或者后继,则不输出。给定关键字为每个输出占一行。

样例输入

10 3
1 2 3 4 5 6 7 8 9 0
3
1
0

样例输出

2 4
2
9
#include<iostream>
using namespace std;
//双向链表的结点,两个指针域,一个数据域
class  listnode {
public:
	int key;
	listnode* pre;
	listnode* next;
	listnode() {
		pre = NULL;
		next = NULL;
	}
};

class linklist {
public:
	int len;
	listnode* head;
	//只有一个表头结点的空链表
	linklist() {
		len = 0;
		head = new listnode();
		head->next = NULL;
		head->pre = NULL;
	}
	void Create(int n) {//n表示链表长度
		len = n;
		int k;//k表示数据
		listnode* p = head;//q一开始指向空的头指针
		for (int i = 1;i <= len;i++) {
			listnode* q = new listnode();//新建一个结点

			cin >> k;
			q->key = k;//把数据存入结点p的数据域中
			p->next = q;
			q->pre = p;
			p = q;
		}
		//head->pre = NULL;
	}
	//寻找指定数据域的结点
	listnode* find(int k) {//k是指定数据域的内容
		listnode* p = head;

		while (p->next != NULL) {
			p = p->next;//这个要注意逻辑,放在if前和if后是不一样的,放在后面那么最后一个数字就
//没有执行循环无法进行数据比较了
			if (p->key == k) {
				return p;
			}
			
		}
	}


	void print(int k) {
		find(k);
		if ((find(k)->next != NULL) && (find(k)->pre != head)) {
			cout << find(k)->pre->key << " " << find(k)->next->key << endl;
		}
			

		else if (find(k)->pre ==head) {
			
			cout << find(k)->next->key << endl;
		}
			

		else {
			
			cout << find(k)->pre->key << endl;
		}
			
	}
};
	int main() {
		int n, m, key;
		linklist l;
		cin >> n >> m;
		l.Create(n);


		while (m--) {
			cin >> key;
			l.find(key);

			l.print(key);
		}
	}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值