建立两个带头结点单链表
时间: 2024-03-05 17:47:44 浏览: 21
好的,我来给你写一下建立两个带头结点单链表的代码。这里假设链表中存储的元素为整型数。
```c++
#include <iostream>
using namespace std;
struct ListNode{
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode *createList(){
ListNode *head = new ListNode(0); // 头结点
ListNode *cur = head;
int n;
cout << "输入链表长度:";
cin >> n;
for(int i=0; i<n; i++){
int x;
cin >> x;
ListNode *node = new ListNode(x);
cur->next = node;
cur = node;
}
return head;
}
int main(){
ListNode *list1 = createList();
ListNode *list2 = createList();
return 0;
}
```
这个程序会提示你输入两个链表的长度,然后分别输入每一个节点的值,最后返回两个带头结点的链表头指针 list1 和 list2。
相关问题
设计一个算法,将一个结点值为自然数的带头结点单链表拆分为两个带头结点单链表,原表中保留值为偶数的结点,而值为奇数的结点按它们在原表中的相对次序组成一个新的带头结点单链表。
算法如下:
1. 定义两个新的带头结点单链表,分别为evenList和oddList。
2. 遍历原链表,如果结点的值为偶数,则将该结点插入evenList中;如果结点的值为奇数,则将该结点插入oddList中。
3. 遍历完原链表后,将oddList插入到evenList的末尾。
4. 返回evenList和oddList。
代码实现如下:
```
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
pair<ListNode*, ListNode*> splitList(ListNode* head) {
ListNode* evenList = new ListNode(0);
ListNode* oddList = new ListNode(0);
ListNode* evenTail = evenList;
ListNode* oddTail = oddList;
ListNode* cur = head->next;
while (cur != NULL) {
if (cur->val % 2 == 0) {
evenTail->next = cur;
evenTail = evenTail->next;
} else {
oddTail->next = cur;
oddTail = oddTail->next;
}
cur = cur->next;
}
evenTail->next = oddList->next;
oddTail->next = NULL;
return make_pair(evenList, oddList);
}
```
编写程序,建立2个带头结点单链表,输入若干整数将正整数插入第1个单链表,将负整数插入第2个单链表,插入前和插入后单链表保持递增或相等次序,显示2个单链表,最后销毁。
这是一个编程问题,我可以为您提供一些帮助。您可以按照以下步骤进行:
1. 建立两个带头结点单链表。
2. 读入若干整数,并将正整数插入第一个单链表,将负整数插入第二个单链表,插入前和插入后单链表保持递增或相等次序。
3. 显示两个单链表。
4. 销毁两个单链表。
以下是一段伪代码,您可以按照您熟悉的编程语言来实现它:
```
// 建立两个带头结点单链表
List positiveList = createList();
List negativeList = createList();
// 读入若干整数,并将正整数插入第一个单链表,将负整数插入第二个单链表
while (not_end_of_input) {
int number = read_input();
if (number > 0) {
insert_into_list_in_order(positiveList, number);
} else if (number < 0) {
insert_into_list_in_order(negativeList, number);
}
}
// 显示两个单链表
display_list(positiveList);
display_list(negativeList);
// 销毁两个单链表
destroy_list(positiveList);
destroy_list(negativeList);
```