合併兩個有序連結串列,合併之後依舊有序
解法一 使用遞迴
struct list_node { int data; list_node* next; list_node(int data) :data(data) , next(NULL) {} }; // 1 遞迴法 list_node* R_mergc(list_node* l1, list_node* l2) { if (l1 == NULL) { return l2; } else if (l2 == NULL) { return l1; } //下邊的要注意返回值 //方法一 /*if (l1->data < l2->data) { l1->next = R_mergc(l1->next, l2); return l1; } else { l2->next = R_mergc(l2->next, l1); return l2; }*/ //方法二 list_node* tmp = NULL; if (l1->data < l2->data) { tmp = l1; tmp->next = R_mergc(tmp->next, l2); } else { tmp = l2; tmp->next = R_mergc(tmp->next, l1); } return tmp; }
解法二
struct list_node { int data; list_node* next; list_node(int data) :data(data) , next(NULL) {} }; // 2 非遞迴 list_node* mergc(list_node* l1, list_node* l2) { if (NULL == l1) { return l2; } else if (NULL == l2) { return l1; } list_node* head = NULL; //用作返回的頭結點 list_node* p1 = l1; //用作 l1 的零時變數 list_node* p2 = l2; //用作 l2 的零時變數 if (p1->data < p2->data) { head = p1; p1 = p1->next; } else { head = p2; p2 = p2->next; } list_node* cur = head; // while (p1 && p2) { if (p1->data < p2->data) { cur->next = p1; cur = cur->next; p1 = p1->next; } else { cur->next = p2; cur = cur->next; p2 = p2->next; } } if (p1 != NULL) { cur->next = p1; } else { cur->next = p2; } return head; }
相關推薦
輸入兩個遞增連結串列,合併為一個遞增連結串列(面試題)
輸入兩個遞增連結串列,合併為一個遞增連結串列。 public class LinkedTest { public static void main(String[] args) {
合併兩個有序連結串列,合併之後仍有序
合併兩個有序連結串列,合併之後仍有序。 標頭檔案引用連結串列的一些基本操作 ListNode * MergeOrderedList(ListNode *List1,ListNode *List2) { ListNode *cur1 = List1; ListNode *cur2
合併兩個有序連結串列,合併後依然有序
pNode MergeSList(pList plist1, pList plist2) { pNode pNewHead = NULL;//新連結串列 pNode pTail = NULL;//新連結串列的尾指標 pNode pL1 = plist1; pNode
合併兩個有序連結串列,合併之後任然是有序的並輸出。
合併連結串列相信大家都特別熟悉,但是如果要加上一定的輸出格式,難度就會有所增加,不說了,見程式碼。 #include<iostream> using namespace std; struct Node{ Node *next; int data
合併兩個有序連結串列,合併後依然有序 --- 三種方法
1.合併連結串列p1,p2到p1上 void CombineList(ListNode** p1,ListNode* p2)//合併連結串列p1,p2 到p1 { if (*p1 == NULL) { *p1 = p2;
合併兩個有序連結串列,合併之後依舊有序
解法一 使用遞迴 struct list_node { int data; list_node* next; list_node(int data) :data(data) , n
劍指 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
?合併兩個排序連結串列
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)連結串列為空時;
Python-劍指offer(15,16)反轉連結串列,合併兩個連結串列
題目:輸入一個連結串列,反轉連結串列後,輸出新連結串列的表頭。 環境:Python2.7.3 # -*- coding:utf-8 -*- # class ListNode: # def _
兩個有序連結串列的合併
二、實驗分析(1)問題分析1、考慮兩個連結串列L1,L2中資料的多少;2、用兩個指標同時遍歷兩個有序連結串列L1,L2,並且比較每次讀取的兩個連結串列元素的數值,將其中的小值插入到新的連結串列L中。3、考慮到其中連結串列L1(或者L2)由於元素少,而被先遍歷完,另個連結串列L
21. 合併兩個有序連結串列/23. 合併K個排序連結串列
1.合併兩個有序連結串列 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* Phead = new ListNode(0); ListNode* l3 = Phead; while
PTA資料結構題程式設計題7-51 兩個有序連結串列序列合併
已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2合併後的新的非降序連結串列S3。輸入格式:輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−表示序列的結尾(−不屬於這個序列)。數字用空格間隔。輸出格式:在一行中輸出合併後新的非降序連結串列,數字間用空