写点什么

第八周

用户头像
Geek_fabd84
关注
发布于: 2020 年 11 月 15 日

有两个单向链表(链表长度分别为m,n),这两个单向链表有可能在某个元素合并,也

可能不合并,如下图所示的这样。现在给定两个链表的头指针,在不修改链表的情况下,

如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的x 元

素。

请用代码(或伪代码)描述算法,并给出时间复杂度。



package com.demo;
/******************************
* 用途说明: 节点
* 作者姓名: chenshijie
* 创建时间: 2020/11/15 11:36
******************************/
public class Node {
public char data;
public Node next;
public char getData() {
return data;
}
public void setData(char data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}



package com.demo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/******************************
* 用途说明: 链表操作
* 作者姓名: chenshijie
* 创建时间: 2020/11/15 11:38
******************************/
public class Link {
private static final Logger LOGGER = LoggerFactory.getLogger(Link.class);
/**
* 将两个链表合并到新链表
* @param head1
* @param head2
*/
public static void mergeToNewNode(Node head1, Node head2) {
Node newNode = new Node();
merge(newNode,head1,head2);
}
public static void merge(Node newNode, Node head1, Node head2) {
if (head1.data > head2.data) {
newNode.next = head2;
merge(newNode.next,head1, head2.next);
} else if(head1.data < head2.data){
newNode.next = head1;
merge(newNode.next,head1.next, head2);
}else{
LOGGER.info("链表出现了合并元素:{} ==== {}",head1.data,head2.data);
}
}
}

将两个链表合并到一个全新的链表,一旦出现了相同的元素就说明两个链表有合并,时间复杂度O(n+m)

用户头像

Geek_fabd84

关注

还未添加个人签名 2019.06.30 加入

还未添加个人简介

评论

发布
暂无评论
第八周