單連結串列的歸併(資料結構)
思考:
1、別忘了給頭節點的next先賦值為NULL
2、將p1->next設為p2,不是把p1->next的值賦給p2
歸併演算法
void Merge(LinkList &a, LinkList &b)
{
LinkList p1 = a->next;
LinkList p2 = b->next;
a->next = NULL;
LinkList p3;
while (p1 && p2) {//判斷迴圈出去的條件
if (p1->data <= p2->data) {
p3 = p1->next;
p1->next = a->next;
a->next = p1;
p1 = p3;
} else {
p3 = p2->next;
p2->next = a->next;
a->next = p2;//直接頭插法插回a連結串列
p2 = p3;
}
}
if (p2) p1 = p2;
while (p1) {//如果兩個的長度不一樣,則還要把長的那個也插到a連結串列
p3 = p1->next;
p1->next = a->next;
a->next = p1;
p1 = p3;
}
free (b);
}
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
typedef struct Node
{
int data;
struct Node *next;
}Node, *LinkList;
void CreatList(LinkList &p, int n)
{
p = (LinkList) malloc (sizeof(Node));
p->next = NULL;//別忘了給頭節點的next先賦值為NULL
LinkList p1 = p;
LinkList p2;
for (int i = 0; i < n; i++) {
int a;
scanf ("%d", &a);
p2 = (LinkList) malloc (sizeof(Node));
p1->next = p2;//將p1->next設為p2,不是把p1->next的值賦給p2
p2->data = a;
p1 = p2;
}
p1->next = NULL;
}
void Merge(LinkList &a, LinkList &b)
{
LinkList p1 = a->next;
LinkList p2 = b->next;
a->next = NULL;
LinkList p3;
while (p1 && p2) {
if (p1->data <= p2->data) {
p3 = p1->next;
p1->next = a->next;
a->next = p1;
p1 = p3;
} else {
p3 = p2->next;
p2->next = a->next;
a->next = p2;
p2 = p3;
}
}
if (p2) p1 = p2;
while (p1) {
p3 = p1->next;
p1->next = a->next;
a->next = p1;
p1 = p3;
}
free (b);
}
void PrintList(LinkList a)
{
LinkList p = a->next;
while (p) {
printf ("%d ", p->data);
p = p->next;
}
printf ("\n");
}
int main()
{
int n, m;
scanf ("%d%d", &n, &m);
LinkList a, b;
CreatList (a, n);
CreatList (b, m);
Merge (a, b);
PrintList (a);
return 0;
}
相關文章
- 資料結構實驗之連結串列四:有序連結串列的歸併資料結構
- 資料結構-單連結串列、雙連結串列資料結構
- 資料結構04——單連結串列資料結構
- 資料結構之單連結串列資料結構
- 連結串列歸併排序排序
- 資料結構實驗之連結串列五:單連結串列的拆分資料結構
- 資料結構之連結串列篇(單連結串列的常見操作)資料結構
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列
- 資料結構-連結串列資料結構
- 資料結構--連結串列資料結構
- 資料結構—連結串列資料結構
- 資料結構 - 連結串列資料結構
- 連結串列-資料結構資料結構
- 【資料結構】連結串列(單連結串列實現+詳解+原碼)資料結構
- js實現資料結構--單連結串列JS資料結構
- 【資料結構】線性表-單連結串列資料結構
- 實戰資料結構(3)_兩個單連結串列間的合併操作資料結構
- 反轉連結串列、合併連結串列、樹的子結構
- 畫江湖之資料結構【第一話:連結串列】單向連結串列資料結構
- 畫江湖之資料結構 [第一話:連結串列] 單向連結串列資料結構
- 資料結構——單連結串列的C++實現資料結構C++
- 實戰資料結構(1)_單連結串列的操作資料結構
- 資料結構之連結串列與陣列(3):單向連結串列上的簡單操作資料結構陣列
- JavaScript資料結構--連結串列JavaScript資料結構
- 資料結構之「連結串列」資料結構
- 資料結構之連結串列資料結構
- 資料結構 - 單連結串列 C++ 實現資料結構C++
- 【資料結構】實現單連結串列(c++)資料結構C++
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- 核心中的連結串列資料結構資料結構
- 資料結構之單連結串列的建立與刪除資料結構
- 實戰資料結構(10)_單連結串列的就地排序資料結構排序
- python 資料結構之單連結串列的實現Python資料結構
- 資料結構-2.單向連結串列的實現資料結構
- Redis資料結構—連結串列與字典的結構Redis資料結構
- 【資料結構】歸併排序!!!資料結構排序
- 【資料結構】歸併排序資料結構排序
- [C++]歸併排序(連結串列描述)C++排序