链式表示两种方式中选择一种存储方式,实现线性表的创建、插入、合并算法。
时间: 2023-06-18 13:06:55 浏览: 139
链式存储结构有两种方式:单链表和双向链表。下面给出单链表的实现。
单链表的结构体定义如下:
```C++
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
```
其中,val表示节点的值,next指向下一个节点。
创建单链表的算法如下:
```C++
ListNode* createLinkedList(vector<int>& nums) {
ListNode* head = new ListNode(-1);
ListNode* cur = head;
for (int num : nums) {
cur->next = new ListNode(num);
cur = cur->next;
}
return head->next;
}
```
其中,nums是初始值的vector,head是头节点,cur是当前节点,循环遍历nums,创建新节点,将当前节点的next指向新节点,然后将当前节点更新为新节点。
插入节点的算法如下:
```C++
void insertNode(ListNode* head, int val) {
ListNode* node = new ListNode(val);
node->next = head->next;
head->next = node;
}
```
其中,head为头节点,val为要插入的节点的值,创建新节点,将新节点的next指向head的next,然后将head的next指向新节点。
合并两个单链表的算法如下:
```C++
ListNode* mergeLinkedList(ListNode* head1, ListNode* head2) {
ListNode* dummy = new ListNode(-1);
ListNode* cur = dummy;
while (head1 && head2) {
if (head1->val <= head2->val) {
cur->next = head1;
head1 = head1->next;
} else {
cur->next = head2;
head2 = head2->next;
}
cur = cur->next;
}
cur->next = head1 ? head1 : head2;
return dummy->next;
}
```
其中,head1和head2是两个待合并的单链表的头节点,dummy是虚拟头节点,cur是当前节点。循环遍历两个单链表,将较小的节点链接到当前节点后面,然后将当前节点更新为较小节点的下一个节点。最后,将剩余的节点链接到当前节点后面。
阅读全文