题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
代码
/**
* 题目描述:
* 输入两个单调递增的链表,输出两个链表合成后的链表,
* 当然我们需要合成后的链表满足单调不减规则。
* @author syf
*
*/
public class 合并两个排序的链表 {
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) {
Node1 mergeHead = null ;
Node1 node = new Node1(10);
node.next = new Node1(20);
node.next.next = new Node1(30);
Node1 node1 = new Node1(31);
node1.next = new Node1(41);
node1.next.next = new Node1(51);
/*List<Integer> list = new ArrayList<Integer>();
list = mergeNode(node, node1);
System.out.println(list);*/
mergeHead = mergeLink(node, node1);
while(mergeHead != null){
System.out.print(" "+ mergeHead.data);
mergeHead = mergeHead.next ;
}
}
/**
* idea:
*
* @param head1 linked 1 node
* @param head2 linkde 2 node
* @return
*/
@SuppressWarnings({ "rawtypes", "unused" })
public static List<Integer> mergeNode(Node1 head1,Node1 head2){
//Node1 merge = null ;
List<Integer> list = new ArrayList<Integer>();
if(head1 == null ){
list.add((Integer) head2.data) ;
return list;
}
if(head2 == null){
list.add((Integer) head2.data);
return list;
}
if(head1 == null && head2 == null ){
return null;
}
while( head2 != null || head1 != null ){
if((Integer)head1.data < (Integer)head2.data){
list.add((Integer) head1.data);
//System.out.println("----"+head1.data);
head1 = head1.next ;
}else{
list.add((Integer) head2.data);
//System.out.println("----"+head2.data);
head2 = head2.next ;
}
}
return list ;
}
/**
* 第二种方法:
* @param head1
* @param head2
* @return
*/
public static Node1 mergeLinked(Node1 head1,Node1 head2){
if(head1 == null ){
return head2;
}
if(head2 == null){
return head1;
}
Node1 mergeNode = null ;
if(head1.data <= head2.data){
mergeNode = head1 ;
head1 = head1.next ;
}else{
mergeNode = head2 ;
head2 = head2.next ;
}
Node1 cur = mergeNode ;
while(head1 != null && head2 != null){
if(head1.data <= head2.data){
cur.next = head1 ;
head1 = head1.next ;
}else{
cur.next = head2 ;
head2 = head2.next ;
}
cur = cur.next;
}
if(head1 == null){
cur.next = head2 ;
}else if(head2 == null){
cur.next = head1;
}
return mergeNode;
}
/**
* 第三种方法:递归
* @param head1
* @param head2
* @return
*/
public static Node1 mergeLink(Node1 list1 , Node1 list2){
if(list1 == null ){
return list2;
}
if(list2 == null){
return list1;
}
Node1 mergeNode = null;
if(list1.data <= list2.data){
mergeNode = list1;
mergeNode.next = mergeLink(list1.next, list2);
}else{
mergeNode = list2 ;
mergeNode.next = mergeLink(list1, list2.next);
}
return mergeNode ;
}
}
//链表1
class Node1{
Integer data ;
@SuppressWarnings("rawtypes")
Node1 next ;
public Node1(Integer data ){
this.data = data ;
}
}