目前我对于单链表的头插式建立法比较了解但是在遇到Leetcode002题时,我发现它同时建立了两个单链表,以前我建立单链表时总是使用head_creat()这个函数但是这样的话,往往实现不了将两个链表区分开来的作用,经过搜索我发现了这个方法
以上是他人的文章
这里我们可以发现他使用了这样的方法
注意点一
在头插式建立链表函数的基础上在函数中添加了参数
1:我当前要建立的链表的头指针
2:该链表的长度
注意点二
他在定义结构体时加入了listnode(int x)这样的一个函数
我感觉这就是一个自己定义的构造函数
如果是默认的构造函数,我们会用ListNode*p=new List Node();这样的一个函数
此时就会变成ListNode*p=new ListNode(0)前提是还没给这样的一个结点赋值
注意点三
输出函数参数也加入了头指针让我们知道该遍历哪个链表
接下来我将使用自己的方法尝试能否自己实现
#include<iostream>
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;
}
成功实现了