您的位置:首页 > 职场人生

微软等面试100题系列 - 41

2016-04-12 22:43 441 查看

41.请修改append函数,利用这个函数实现:

两个非降序链表的并集,1->2->3 和 2->3->5 并为 1->2->3->5

另外只能输出结果,不能修改两个链表的数据。

此题,合并链表,要求将俩个非有序排列的链表,有顺序的合并。

package com.algorithm.interview;

public class LinkMerge {

public class LinkNode{
int data;
LinkNode next;
public LinkNode(int data, LinkNode next){
this.data = data;
this.next = next;
}
}

public LinkNode append(LinkNode h1, LinkNode h2){
LinkNode loop1 = h1;
LinkNode loop2 = h2;
LinkNode temp;
//  LinkNode temp2;
LinkNode res = null;
LinkNode loop3 = null;
if(h1.data < h2.data){
res = new LinkNode(h1.data, null);
//   res.data = h1.data;
//   LinkNode next = new LinkNode(h2.data, null);
//   res.next = next;
loop3 = res;
loop1 = h1.next;
loop2 = h2;
}
if(h1.data > h2.data){
res = new LinkNode(h2.data, null);
//   res.data = h2.data;
//   LinkNode next = new LinkNode(h1.data, null);
//   res.next = next;
loop3 = res;
loop1 = h1;
loop2 = h2.next;
}
//  if(res == null){
//
//  }
while(loop1 != null || loop2 != null){
if(loop1 != null && loop2 != null){
if(loop1.data > loop2.data){
temp = new LinkNode(loop2.data,null);
loop3.next = temp;
loop2 = loop2.next;
loop3 = temp;
//     temp1 = loop1.next;
//     loop1.next = loop2;
//     temp2 = loop2.next;
//     loop2.next = temp1;
}else if(loop1.data < loop2.data){
temp = new LinkNode(loop1.data,null);
loop3.next = temp;
loop1 = loop1.next;
loop3 = temp;
}if(loop1.data == loop2.data){
//     if(loop1.next != null){
//      temp
//     }
temp = new LinkNode(loop1.data,null);
loop3.next = temp;
loop1 = loop1.next;
loop2 = loop2.next;
loop3 = temp;
}
}
if(loop1 == null){
temp = new LinkNode(loop2.data,null);
loop3.next = temp;
//    loop1 = loop1.next;
loop2 = loop2.next;
loop3 = temp;
}
if(loop2 == null){
temp = new LinkNode(loop1.data,null);
loop3.next = temp;
//    loop1 = loop1.next;
loop1 = loop1.next;
loop3 = temp;
}
}
return res;
}

public void printLink(LinkNode h){
while(h != null){
System.out.print(h.data);
h = h.next;
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
LinkMerge merge = new LinkMerge();
LinkNode node25 = merge.new LinkNode(5,null);
LinkNode node23 = merge.new LinkNode(3,node25);
LinkNode h1 = merge.new LinkNode(2,node23);
LinkNode node13 = merge.new LinkNode(3,null);
LinkNode node12 = merge.new LinkNode(2,node13);
LinkNode h2 = merge.new LinkNode(1,node12);
LinkNode all = merge.append(h1, h2);
merge.printLink(all);
}

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