怎么同时建立两个链表

注意点一

注意点二

注意点三


目前我对于单链表的头插式建立法比较了解但是在遇到Leetcode002题时,我发现它同时建立了两个单链表,以前我建立单链表时总是使用head_creat()这个函数但是这样的话,往往实现不了将两个链表区分开来的作用,经过搜索我发现了这个方法

https://blog.csdn.net/weixin_45774972/article/details/115374066?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%A6%82%E4%BD%95%E5%90%8C%E6%97%B6%E5%BB%BA%E7%AB%8B%E4%B8%A4%E4%B8%AA%E9%93%BE%E8%A1%A8&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-6-.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187

以上是他人的文章

这里我们可以发现他使用了这样的方法

注意点一

怎么同时建立两个链表_第1张图片

 在头插式建立链表函数的基础上在函数中添加了参数

1:我当前要建立的链表的头指针

2:该链表的长度

注意点二

怎么同时建立两个链表_第2张图片

 他在定义结构体时加入了listnode(int x)这样的一个函数

我感觉这就是一个自己定义的构造函数

如果是默认的构造函数,我们会用ListNode*p=new List Node();这样的一个函数

此时就会变成ListNode*p=new ListNode(0)前提是还没给这样的一个结点赋值

注意点三

怎么同时建立两个链表_第3张图片

 输出函数参数也加入了头指针让我们知道该遍历哪个链表

接下来我将使用自己的方法尝试能否自己实现

#include
using namespace std;
struct Node {//创建进程控制块
	int data;
	struct Node *next;//指向下一个结点的指针
	Node(int x) :data(x), next(NULL) {};
};
//头插法创建单链表
void head_creat(Node *head,int l)
{
	int n;
	for (int i = 0; i < l; i++) {
		Node *p = new Node(0);
		cout << "请输入当前结点的值" << endl;
		cin >> n;
		p->data = n;//给结点赋值
		p->next = head->next;
		head->next = p;
	}
}
void show(Node *head) {
	Node *p = head->next;
	while (p) {
		cout << p->data<<"  ";
		p= p->next;
	}
	cout << endl;
}
int main() {
	int l1, l2;
	Node* head1, *head2;//两个头指针指向两条不同的链表
	head1 = new Node(0); head2 = new Node(0);
	head1->next = NULL;
	head2->next = NULL;
	cout << "链表1的长度" << endl;
	cin >> l1;
	cout << "输入链表1的值" << endl;
	head_creat(head1, l1);
	cout << "链表2的长度" << endl;
	cin >> l2;
	cout << "输入链表2的值" << endl;
	head_creat(head2, l2);
	show(head1);
	show(head2);
	return 0;
}

成功实现了

你可能感兴趣的:(数据结构,链表,指针,数据结构)