实现思路:同时从头节点开始遍历链表,将对应位置的数据进行比较,小的数据存入链表,指针向前移动,两个链表的长度不一致,需要考虑链表的长度是否为空,如果为空,合并另一条链表剩余的节点。
public class Linked {
/*
* Linked:单向链表实现类
*/
public Node first; // 头结点
public Node last; // 尾节点
public int size; // 链表长度
/*
* Node链表中的节点
*/
public static class Node {
public int val; // 数据
public Node next; // 下一个元素
public Node(int x) {
val = x;
}
}
// 添加链表元素(尾插法)
public void add(int val) {
// 获取链表的尾节点
final Node l = last;
// 创建新节点
final Node newNode = new Node(val);
// 判断原来的尾节点是否等于null
if (l != null) {
l.next = newNode; //让原来的尾节点的next -> 新节点
} else {
first = newNode; //首节点 -> 新节点
}
last = newNode; //尾节点 -> 新节点
size++; // 链表长度递增
}
/*
* 获取链表长度
*/
public int size() {
int size = 0;
for (Node x = first; x != null; x = x.next) {
size++;
}
return size;
}
/*
* 遍历链表所有节点
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (Node x = first; x != null; x = x.next) {
sb.append(x.val);
if(x.next != null) {
sb.append("->");
}
}
return sb.toString();
}
}
链表合并
public static Linked mearge(Linked l1,Linked l2){
// 创建两个指针
Linked.Node p1,p2;
p1=l1.first;
p2=l2.first;
Linked result=new Linked();
// 如果链表不为空
while(p1!=null||p2!=null){
//
if(p1.val<p2.val){
result.add(p1.val);
p1=p1.next;
}else{
result.add(p2.val);
p2=p2.next;
}
if(p1==null){
result.add(p2.val);
p2=p2.next;
continue;
}
if(p2==null){
result.add(p1.val);
p1=p1.next;
continue;
}
}
return result;
}