【資料結構】合併兩個有序連結串列,合併後依然有序
//遞迴 pList Merge(pList list1, pList list2) { pList newlist = NULL; if (NULL == list1) { return list2; } if (NULL == list2) { return list1; } if (NULL == list1 && NULL == list2) { return NULL; } if ((list1)->data == (list2)->data) { newlist = list1; newlist->next = Merge_R((list1)->next, (list2)->next); } if ((list1)->data < (list2)->data) { newlist = list1; newlist->next = Merge_R((list1)->next, list2); } if ((list1)->data >(list2)->data) { newlist = list2; newlist->next = Merge_R(list1, (list2)->next); } while (list1) { list1 = (list1)->next; } while (list2) { list2 = (list2)->next; } return newlist; } //非遞迴 pList Merge_R(pList list1, pList list2) { pList newlist = NULL; pNode cur = NULL; if (list1 == NULL) newlist = list2; if (list2 == NULL) newlist = list1; if (NULL == list1 && NULL == list2) { return NULL; } if (list1->data == list2->data) { cur = BuyNode(list1->data); list2 = list2->next; list1 = list1->next; newlist = cur; } else if (list1->data > list2->data) { cur = BuyNode(list2->data); list2 = list2->next; newlist = cur; } else if (list1->data < list2->data) { cur = BuyNode(list1->data); list1 = list1->next; newlist = cur; } while (list1&&list2) { if (list1->data >= list2->data) { cur->next = BuyNode(list2->data); list2 = list2->next; cur = cur->next; } else if (list1->data < list2->data) { cur->next = BuyNode(list1->data); list1 = list1->next; cur = cur->next; } } while (list1) { cur->next = BuyNode(list1->data); list1 = list1->next; cur = cur->next; } while (list2) { cur->next = BuyNode(list2->data); list2 = list2->next; cur = cur->next; } return newlist; }
相關推薦
【資料結構】帶有尾指標的連結串列:連結串列實現佇列
前面寫了用動態陣列實現佇列,現在我將用帶有尾指標的連結串列實現佇列。 我們知道佇列需要在兩端進行操作,如果是以普通連結串列進行底層實現的佇列,在入隊時需要找到最後一個節點才能進行新增元素,這樣相當於遍歷一遍連結串列,從而造成巨大的時間浪費。 為了解決這個問題,我們引入了尾
【資料結構】雙向帶頭結點迴圈連結串列
在之前我們寫了不帶頭結點的單鏈表,但它在資料操作時也有繁瑣之處,而雙向帶頭結點迴圈連結串列則優化了單鏈表的操作,使連結串列更加方便。雙向帶頭結點迴圈連結串列在單鏈表的基礎上增加了以下幾點: (1)在資料結構上附加一個域,使它存放指向前一個結點的指標; (2)增加了一個頭結點,前驅指向連結串列
【資料結構】-線性表-順序表-1324: 演算法2-2:有序線性表的有序合併
1324: 演算法2-2:有序線性表的有序合併 題目描述 已知線性表 LA 和 LB 中的資料元素按值非遞減有序排列,現要求將 LA 和 LB 歸併為一個新的線性表 LC, 且 LC 中的資料元素仍然按值非遞減有序排列。例如,設LA=(3,5,8,11)
資料結構中的兩個順序表的合併
#include <iostream> #include<stdlib.h> using namespace std; #define MAXSIZE 100 #define TRUE 1 #define FALSE 0 #define OK 1
【C++資料結構】模版類實現雙迴圈連結串列的基本操作
單鏈表結構為我們提供方便分資料插入和刪除工作,美中不足的是查詢資料不方便,對於單鏈表查詢資料至少要遍歷一邊. 為此我們提出雙鏈表結構,從而方便的查詢資料. 給出雙鏈表的一般結構: 一種是帶頭結點(哨兵位)的管理方式,另一種是帶管理節點管理方式。 但是我們不建議採用
劍指 Offer - 16:合併兩個排序連結串列
題目描述 輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則 題目連結:https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337
Lintcode 165. 合併兩個排序連結串列
我的程式碼如下: def mergeTwoLists(self, l1, l2): if l1 == None: return l2 if l2 == None: return l1
LinCode 165.合併兩個排序連結串列
思路 兩個指標,分別指向兩個連結串列,從頭開始遍歷 另一個指標指向新建立的節點,將排序好的節點串聯起來 注意此題是允許重複元素的 /** * Definition of singly-linked-list: * class ListNode { * p
C++將兩個遞增連結串列 合併成 一個遞增連結串列 不佔用額外的空間
/*create by tyy*/ #include <iostream> #include <string> using namespace std; #define ok 1 #define error -1 #define overflow -
?合併兩個排序連結串列
public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { if(list1 == null){ return list2; }
合併兩個排序連結串列(LintCode)
實現程式碼:#include <iostream> using namespace std; //Definition of ListNode class ListNode { public: int val; ListNode *next; ListNode(int
[劍指Offer] 25_合併兩個排序連結串列
題目 輸入兩個遞增排序的連結串列,合併這兩個連結串列並使新連結串列中的節點仍然使遞增排序的。 例: L1:1->3->5->7 L2:2->4->6->8 L:1->2->3->4->5->6->
Lintcode 165合併兩個排序連結串列
1.問題描述:將兩個排序連結串列合併為一個新的排序連結串列 2.解題思路:遍歷兩個連結串列的公共長度,根據節點值得大小來改變每次節點的連線,然後判斷那條連結串列還有剩餘,最後將較長連結串列的剩餘部分追加到節點的後面 3.通過的程式碼: /** * Definition o
面試雜題(八)合併兩個遞增連結串列
#include <iostream> typedef struct LinklistNode { int nData; struct LinklistNode *next; }Node; using namespace std; #define N
LintCode-合併兩個排序連結串列
題目描述:將兩個排序連結串列合併為一個新的排序連結串列 樣例 給出1->3->8->11->15->null,2->null,返回1->2->3->8->11->15->null。 做題思路:用兩個頭
劍指offer面試題17-:合併兩個排序連結串列
將兩個已經排好序的連結串列(升序)進行合併,使得合併後的連結串列仍然有序。 假設兩個連結串列分別為A和B,我的思路是將使用兩個指標p和q掃描兩個連結串列各一遍,將B連結串列中的元素插入到A中,最終形成一個新的連結串列。 邊界條件:(1)連結串列為空時;
【資料結構】【合併兩個有序連結串列】
#include<stdio.h> #include<string.h> #include<stdlib.h> const int maxn = 1e5 + 5; struct node { int num; struct node *next; }; s
【資料結構】合併兩個有序連結串列,合併後依然有序
//遞迴 pList Merge(pList list1, pList list2) { pList newlist = NULL; if (NULL == list1) { return list2; } if (NULL == list2)
【資料結構】連結串列相關練習題:判斷兩個連結串列是否相交
編寫一個程式,找到兩個單鏈表相交的起始節點。 例如,下面的兩個連結串列: A: a1 → a2 ↘ c1 → c2 → c3 ↗
c語言資料結構中兩個有序連結串列合併為一個新連結串列
先建立兩個連結串列La和Lb,並向La Lb中輸入值,然後再建立一個Lc,Lc指向La,具體程式碼如下: #include "stdafx.h" #include"stdio.h" #include"stdlib.h" #define OK 1 #define OVERFL