您的位置:首页 > 编程语言 > Java开发

java 合并两个有序单链表

2017-05-23 20:57 459 查看
package datastruct.uselikedlist;
/**
*  合并两个单链表
*
*/
class ListNode{
int val ;
ListNode next;
public ListNode(int x) {
this.val=x;
}
}
public class MergeTwoOfLikedList {
ListNode head=null;
//往ListNode 中添加节点
public void add(int data){
ListNode newNode=new ListNode(data);
//添加头结点
if (head==null) {
head=newNode;
return;
}
//添加头结点以外的其他结点
ListNode temp=head;
while (temp.next!=null) {
temp=temp.next;
}
temp.next=newNode;
}

//打印结点
public void printNode(ListNode head){
ListNode temp=head;
while(temp!=null){
System.out.print(temp.val+" ");
temp=temp.next;
}
}
//合并两个链表
public ListNode  mergeTwoLists(ListNode l1,ListNode l2) {
//如果ListNode l1 中的所有节点都被合并进去,合并l2
if (l1==null) {
return l2;
}
//如果ListNode l2 中的所有节点都被合并进去,合并l1
if (l2==null) {
return l1;
}
ListNode list=null;//用来存放合并的链表
//选择ListNode l1,ListNode l2中较小的结点进行合并
if (l1.val<l2.val) {
list=l1;
list.next=mergeTwoLists(l1.next, l2);
}else {
list=l2;
list.next=mergeTwoLists(l1, l2.next);
}
return list;
}
public static void main(String[] args) {
MergeTwoOfLikedList l1=new MergeTwoOfLikedList();
l1.add(1);
l1.add(3);
l1.add(5);
MergeTwoOfLikedList l2=new MergeTwoOfLikedList();
l2.add(2);
l2.add(4);
l2.add(6);
ListNode list=l1.mergeTwoLists(l1.head, l2.head);
//打印合并后的list
MergeTwoOfLikedList merge=new MergeTwoOfLikedList();
merge.printNode(list);
}
}
 


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息