1. 程式人生 > >兩個有序連結串列序列的合併(java實現)

兩個有序連結串列序列的合併(java實現)

02-線性結構1 兩個有序連結串列序列的合併(15 分)

本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。

函式介面定義:

List Merge( List L1, List L2 );

輸入樣例:

3
1 3 5
5
2 4 6 8 10

輸出樣例:

1 2 3 4 5 6 8 10 
NULL
NULL

思路:

1、兩個連結串列,比較元素大小之後指標後移,最後把某個連結串列剩餘的元素新增進來。

2、就不輸出null null了。


import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		LinkedList<Integer> L1 = new LinkedList<>();
		LinkedList<Integer> L2 = new LinkedList<>();
		Scanner in = new Scanner(System.in);
		int n1 = in.nextInt();
		for(int i = 0 ;i<n1;i++) {
			L1.add(in.nextInt());
		}
		int n2 = in.nextInt();
		for(int i = 0 ;i<n2;i++) {
			L2.add(in.nextInt());
		}
		
		LinkedList<Integer> Lt = merge( L1,  L2);
		System.out.println(Lt);
	}

	public static LinkedList<Integer> merge(LinkedList<Integer> L1,LinkedList<Integer> L2) {
		Iterator<Integer> it1 = L1.iterator();
		Iterator<Integer> it2 = L2.iterator();
		LinkedList<Integer> L3 = new LinkedList<>();
		
		int n1 = L1.size();
		int n2 = L2.size();
		
//		System.out.println(n1+"  "+n2);
		
		Integer m1=0,m2=0;
		if(it1.hasNext())
			m1 = it1.next();
		if(it2.hasNext())
			m2 = it2.next();
		
		for(int i = 1,j = 1 ; i<=n1&&j<=n2 ; ) {
			
			switch(compare(m1,m2)) {
			case 1 : {
				L3.add(m2);
				j++;
				if(it2.hasNext())
					m2=it2.next();
			};
			break;
			
			case -1: {
				L3.add(m1);
				i++;
				if(it1.hasNext())
					m1=it1.next();
			};
			
			break;
			
			case 0 :{
				L3.add(m1);
				L3.add(m2);
				i++;
				j++;
				if(it1.hasNext())
					m1=it1.next();
				if(it2.hasNext())
					m2=it2.next();
			};
			break;
			default: break;
		}
		
		
	}
		if(it1.hasNext())
		{
			L3.add(m1);
			while(it1.hasNext())
			{
				
				L3.add(it1.next());
			}
		}
		else
		{
			L3.add(m2);
			while(it2.hasNext())
			{
			
				L3.add(it2.next());
			}
		}	 
		return L3;
}

	private static int compare(Integer m1, Integer m2) {
		// TODO Auto-generated method stub
		if(m1>m2)
			return 1;
		else if(m1==m2)
			return 0;
		else 
			return -1;
	
	}
}

相關推薦

PTA資料結構題程式設計題7-51 有序連結串列序列合併

已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2合併後的新的非降序連結串列S3。輸入格式:輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−表示序列的結尾(−不屬於這個序列)。數字用空格間隔。輸出格式:在一行中輸出合併後新的非降序連結串列,數字間用空

7-3 有序連結串列序列合併 20 分

7-3 兩個有序連結串列序列的合併 (20 分) 已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2合併後的新的非降序連結串列S3。 輸入格式: 輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−1表示序列的結尾(−1不屬於這個序列)。數字用空格間隔。 輸出格

6-1 有序連結串列序列合併 15 分

本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。 函式介面定義: List Merge( List L1, List L2 ); 其中List結構定義如下: typedef struct Node PtrToNode; struct Node

MOOC陳越資料結構第二週02-線性結構1 有序連結串列序列合併 15 分

首先讀題,題目中說L1,L2都為含頭節點的,第一次做的時候沒有認真讀題以為不帶頭節點,傳出的連結串列也要求帶頭節點。 程式碼 List Merge(List L1,List L2){ List pa,pb,pc,L; L = (List)malloc(si

7-2 有序連結串列序列合併 20 分

已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2合併後的新的非降序連結串列S3。 輸入格式: 輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−表示序列的結尾(−不屬於這個序列)。數字用空格間隔。 輸出格式: 在一行中輸出合併後新的非降序連結串列,數字間用空格分開,結尾不能有

有序連結串列序列合併 20 分

7-90 兩個有序連結串列序列的合併 (20 分) 已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2合併後的新的非降序連結串列S3。 輸入格式: 輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−1表示序列的結尾(−1不屬於這個序列)。數

PTA 02-線性結構1 有序連結串列序列合併 15 分

本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。 函式介面定義: List Merge( List L1, List L2 ); 其中List結構定義如下: typedef struct Node *PtrToNode; struc

6-2 有序連結串列序列合併 14 分

本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。 函式介面定義: List Merge( List L1, List L2 ); 其中List結構定義如下: typedef struct Node PtrToNode; struct Node { E

有序連結串列序列合併java實現

02-線性結構1 兩個有序連結串列序列的合併(15 分)本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。函式介面定義:List Merge( List L1, List L2 );輸入樣例:3 1 3 5 5 2 4 6 8 10 輸出樣例:

有序連結串列序列合併15 分

#include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct Node *Pt

7-51 有序連結串列序列合併20 分

題目: 已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2合併後的新的非降序連結串列S3。 輸入格式: 輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−1表示序列的結尾(−1不屬於這個序列)。數字用空格間隔。 輸出格式: 在一

5-51 有序連結串列序列合併20分

已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2的並集新非降序連結串列S3。輸入格式:輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用-1−1表示序列的結尾(-1−1不屬於這個序列)。數字用空格間隔。輸出格式:在一行中輸出合併後新的非降序連結串列,數

資料結構-線性表- 01 “有序連結串列序列合併” 問題

題目要求: 本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。 函式介面定義: List Merge( List L1, List L2 ); 其中List結構定義如下: typedef struct Node *PtrToNode; struc

PTA 有序連結串列序列的交集 很簡單 不是用連結串列做的

 兩個有序連結串列序列的交集 (20 分) 已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2的交集新連結串列S3。 輸入格式: 輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−1表示序列的結尾(−1不屬於這個序列)。數字用空格間隔。 輸出格式:

[資料結構]02-線性結構1 有序連結串列序列合併

本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。 函式介面定義: List Merge( List L1, List L2 ); 其中List結構定義如下: typedef struct Node *PtrToNode; struct Nod

【問題求教】7-2 有序連結串列序列的交集 20 分

已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2的交集新連結串列S3。 輸入格式: 輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−1表示序列的結尾(−1不屬於這個序列)。數字用空格間隔。 輸出格式: 在一行中輸出兩個輸入序列的交集序列

有序連結串列序列合併

已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2合併後的新的非降序連結串列S3。 輸入格式: 輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−1表示序列的結尾(−1不屬於這個

線性表——有序連結串列序列合併

已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2合併後的新的非降序連結串列S3。 輸入格式: 輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−1表示序列的結尾(−1不屬於這個序列)。數字用空格間隔。 輸出格式: 在一行中輸出合併後新的非降序連結串列,數字間

【浙大資料結構題集】習題2.5 有序連結串列序列合併

題目連結 題意:兩個有序連結串列的合併,輸出的合併後的非遞減連結串列。 思路:主要是輸入和合並兩個函式,輸入用的尾插法,合併則是一一比較,複雜度O(m+n). 程式碼: #include <

mooc浙大資料結構02-線性結構1 有序連結串列序列合併

題目:02-線性結構1 兩個有序連結串列序列的合併(15 分)本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。函式介面定義:List Merge( List L1, List L2 ); 其中List結構定義如下:typedef struct