一、思路

1.比较两个链表的大小
2.将小链表插入到大链表中
3.使用插入保证链表数据的有序性

二、核心代码

  /**
* 合并两个链表,并且按照有序合并
* @param singleLinkedList1 链表1
* @param singleLinkedList2 链表2
*/
public static void mergeLinkedList2(SingleLinkedList singleLinkedList1, SingleLinkedList singleLinkedList2) {
int num1 = getLength(singleLinkedList1.getNode());
int num2 = getLength(singleLinkedList2.getNode());
if (singleLinkedList1.getNode().next == null || singleLinkedList2.getNode().next == null) {
return;
}
if (num1 >= num2) {
Node cur = singleLinkedList2.getNode().next;
Node cur2 = null;
while (cur != null) {
cur2 = cur.next;
singleLinkedList1.insert(cur);
cur = cur2;
}
} else {
Node temp = singleLinkedList1.getNode().next;
Node temp2 = null;
while (temp != null) {
temp2 = temp.next;
singleLinkedList2.insert(singleLinkedList1.getNode());
temp = temp2;
}
}
}

三、全代码

package com.company;

import java.util.Stack;

/**
* @author:抱着鱼睡觉的喵喵
* @date:2021/2/4
* @description:
*/
public class LinkedListDemo {
public static void main(String[] args) {
Node node4 = new Node(4, 96, "Ronin");
Node node1 = new Node(2, 100, "lisi");
Node node2 = new Node(1, 99, "张三");
Node node3 = new Node(3, 63, "zsh");
Node node5 = new Node(5, 65, "zms"); SingleLinkedList singleLinkedList = new SingleLinkedList();
SingleLinkedList singleLinkedList2 = new SingleLinkedList(); singleLinkedList.insert(node4);
singleLinkedList.insert(node1);
singleLinkedList.insert(node2);
singleLinkedList2.insert(node3);
singleLinkedList2.insert(node5);
mergeLinkedList2(singleLinkedList,singleLinkedList2);
int num1 = getLength(singleLinkedList.getNode());
int num2 = getLength(singleLinkedList2.getNode());
if (num1 >= num2) {
singleLinkedList.list();
} else {
singleLinkedList2.list();
} } //计算链表长度
public static int getLength(Node node) {
if (node.next == null) {
return 0;
}
int length = 0;
Node cur = node.next;
while (cur != null) {
length++;
cur = cur.next;
}
return length;
} /**
* 合并两个链表,并且按照有序合并
* @param singleLinkedList1 链表1
* @param singleLinkedList2 链表2
*/
public static void mergeLinkedList2(SingleLinkedList singleLinkedList1, SingleLinkedList singleLinkedList2) {
int num1 = getLength(singleLinkedList1.getNode());
int num2 = getLength(singleLinkedList2.getNode());
if (singleLinkedList1.getNode().next == null || singleLinkedList2.getNode().next == null) {
return;
}
if (num1 >= num2) {
Node cur = singleLinkedList2.getNode().next;
Node cur2 = null;
while (cur != null) {
cur2 = cur.next;
singleLinkedList1.insert(cur);
cur = cur2;
}
} else {
Node temp = singleLinkedList1.getNode().next;
Node temp2 = null;
while (temp != null) {
temp2 = temp.next;
singleLinkedList2.insert(singleLinkedList1.getNode());
temp = temp2;
}
}
}
} //节点类
class Node {
public Node next;
public int sno;
public int score;
public String data; public Node() {
} public Node(int Sno, int NScore, String Data) {
this.sno = Sno;
this.score = NScore;
this.data = Data;
} @Override
public String toString() {
return "Node{" +
"sno=" + sno +
", score=" + score +
", data='" + data + '\'' +
'}';
}
} //节点操作类
class SingleLinkedList {
private Node head = new Node(0, 0, ""); //初始化头节点 public Node getNode() {
return head;
} // add student data
public void add(Node node) { //数据添加
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = node;
} //output
public void list() { //遍历数据进行打印
Node temp = head.next;
if (temp == null) {
System.out.println("LinkedList is empty!");
} else {
while (temp != null) {
System.out.println(temp);
System.out.println();
temp = temp.next;
}
} } //insert by order 2 public void insert(Node node) { //插入数据方式2
Node temp = head;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.sno > node.sno) {
break;
} else if (temp.next.sno == node.sno) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
System.out.println("Student ID :" + node.sno + "already exists!");
return;
} else {
node.next = temp.next;
temp.next = node;
}
} public void modify(Node newNode) { //修改操作
Node temp = head.next;
if (head.next == null) {
System.out.println("LinkedList is empty,unable to modify!");
return;
}
boolean flag = false;
while (true) {
if (temp == null) {
break;
}
if (temp.sno == newNode.sno) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.score = newNode.score;
temp.data = newNode.data;
} else {
System.out.println("No student ID" + newNode.sno);
}
} public void delete(int sno) { //删除操作
Node temp = head;
boolean flag = false;
if (head.next == null) {
System.out.println("LinkedList is empty,Unable to delete.");
return;
}
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.sno == sno) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.next = temp.next.next;
} else {
System.out.println("No student ID:" + sno);
}
} }

Java实现单链表的合并(保证数据的有序性)的更多相关文章

  1. Java实现单链表的各种操作

    Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素   4.实现链表的反转   5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...

  2. JAVA数据结构——单链表

    链表:一. 顺序存储结构虽然是一种很有用的存储结构,但是他有如下几点局限性:1. 因为创造线性表的时候已经固定了空间,所以当需要扩充空间时,就需要重新创建一个地址连续的更大的存储空间.并把原有的数据元 ...

  3. 使用java实现单链表(转载自:https://www.cnblogs.com/zhongyimeng/p/9945332.html)

    使用java实现单链表----(java中的引用就是指针)转载自:https://www.cnblogs.com/zhongyimeng/p/9945332.html ? 1 2 3 4 5 6 7 ...

  4. java实现单链表的增删功能

    JAVA 实现单链表的增删功能 package linked; class LinkedTable{ } public class LinkedTableTest { public static vo ...

  5. 面试之路(10)-BAT面试之java实现单链表的插入和删除

    链表的结构: 链表在空间是不连续的,包括: 数据域(用于存储数据) 指针域(用于存储下一个node的指针) 单项链表的代码实现: 节点类 构造函数 数据域的get,set方法 指针域的get,set方 ...

  6. Java实现单链表的快速排序和归并排序

    本文描述了LeetCode 148题 sort-list 的解法. 题目描述如下: Sort a linked list in O(n log n) time using constant space ...

  7. java实现单链表常见操作

    一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...

  8. 数据结构——Java实现单链表

    一.分析 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点由元素和指针构成.在Java中,我们可以将单链表定义成一个类,单链表的基 ...

  9. 用java实现单链表

    对于一个单链表来说,要求有最基本的数据节点以及一些重要的方法. 方法应该有增删改查.定位.输出.获取链表长度.排序.链表读入.链表输出.下面是我用java写的单链表 public class List ...

随机推荐

  1. 打靶笔记-03-vulhub-Moriarty Corp

    打靶笔记-03-vulhub-BoredHackerBlog 一.靶机信息 Name: BoredHackerBlog: Moriarty Corp(中-高级难度) Date release: 29 ...

  2. topk 问题的解决方法和分析

    1.全排序方法 class Solution: def kClosest(self, points, K): points.sort(key= lambda x: x[0]**2 + x[1]**2) ...

  3. 一步一步迁移ASP.NET Core 6.0-Part1

    .NET 6 发布后,我们现有的应用会逐步升级到这个版本,首当其冲的是原因的ASP.NET Core的工程,如果一步一步升级到ASP.NET Core 6.0 本文简单整理一下升级ASP.NET Co ...

  4. Windows下载安装RabbitMQ教程-------报错卸载重新安装 (要卸载干净 -看下文)

    Could not update enabled plugins file at c:\Users\忙聸鹿忙聳掳忙聰戮\AppData\Roaming\RabbitMQ\enabled_plugins ...

  5. Linux中ftp服务器的安装与部署

    一.ftp简介FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一.FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端.其中FTP ...

  6. springboot自定义启动图画

    小小娱乐,你是不是看到好多文章或段子上有这个 是不是很好玩,其实修改也很简单,就是在springboot的resources下新建一个banner.txt文件,将要输出图案放到txt文件中就好,启动时 ...

  7. python写一个数字字典生成器

    #数字字典生成器 by qianxiao996 #博客地址:https://blog.csdn.net/qq_36374896 #此程序输入开始结束和位数即可在程序所在目录下生成字典 #只支持数字生成 ...

  8. IIS将应用程序池配置为在计划时间执行回收 (IIS 7)

    将应用程序池配置为在计划时间执行回收 您可以通过以下方法执行此过程:使用用户界面 (UI).在命令行窗口中运行 Appcmd.exe 命令.直接编辑配置文件或编写 WMI 脚本. 如下只介绍用户界面U ...

  9. JDK API文档_1.6.0 中文版

    链接:https://pan.baidu.com/s/1b0inUgYvEfjeusa3z_2p-g  密码:f8jk

  10. MySQL面试题--常见的四种隔离级别

    什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...