Java合并两个有序线性表的元素

引言

在编程中,合并两个有序线性表是常见的操作。有序线性表是指其中的元素按照一定的规则排列,例如从小到大或者从大到小。合并两个有序线性表的操作可以用于数据的合并、排序等场景。本文将介绍如何使用Java语言合并两个有序线性表的元素,并提供代码示例。

问题描述

假设有两个有序线性表list1list2,我们需要将两个线性表合并成一个新的有序线性表mergedList,并保持其中的元素仍然有序。

解决方案

我们可以使用两个指针分别指向两个有序线性表的起始位置,比较当前指针指向的元素大小,并将较小的元素加入到新的有序线性表中。然后将指针指向的元素向后移动一位,重复上述过程,直到其中一个有序线性表遍历完毕。最后,将剩下的有序线性表的元素依次加入到新的有序线性表中。

下面是使用Java语言实现合并两个有序线性表的代码示例:

import java.util.ArrayList;
import java.util.List;

public class MergeSortedLists {

    public static List<Integer> merge(List<Integer> list1, List<Integer> list2) {
        List<Integer> mergedList = new ArrayList<>();

        int i = 0, j = 0;
        while (i < list1.size() && j < list2.size()) {
            if (list1.get(i) <= list2.get(j)) {
                mergedList.add(list1.get(i));
                i++;
            } else {
                mergedList.add(list2.get(j));
                j++;
            }
        }

        while (i < list1.size()) {
            mergedList.add(list1.get(i));
            i++;
        }

        while (j < list2.size()) {
            mergedList.add(list2.get(j));
            j++;
        }

        return mergedList;
    }

    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(3);
        list1.add(5);

        List<Integer> list2 = new ArrayList<>();
        list2.add(2);
        list2.add(4);
        list2.add(6);

        List<Integer> mergedList = merge(list1, list2);
        System.out.println("Merged List: " + mergedList);
    }
}

在上述代码中,我们定义了一个merge方法,该方法接受两个有序线性表list1list2作为参数,并返回合并后的有序线性表mergedList。我们使用两个指针ij来表示list1list2的当前位置,通过比较指针指向的元素大小,将较小的元素加入到mergedList中。最后,我们分别处理list1list2中剩下的元素,并将其加入到mergedList中。

main方法中,我们创建了两个有序线性表list1list2,并调用merge方法将它们合并。最后,我们将合并后的结果打印出来。

示例运行结果

Merged List: [1, 2, 3, 4, 5, 6]

关系图

下面是合并两个有序线性表的元素的关系图:

erDiagram
    List1 ||--o{ MergedList : contains
    List2 ||--o{ MergedList : contains
    MergedList ||--o{ List1 : contains
    MergedList ||--o{ List2 : contains

上述关系图表示了List1List2MergedList之间的关系。MergedList包含了List1List2中的元素。

状态图

下面是合并两个有序线性表的元素的状态图:

stateDiagram
    [*] --> Start
    Start --> Merge : Call merge()
    Merge --> Condition : list1[i] <= list2[j]
    Merge --> IncrementI : list1[i] > list2[j]
    IncrementI --> AddToList1 : Add list1[i] to mergedList