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

剑指offer:面试题 17:合并两个排序的链表

2016-08-07 00:00 537 查看
摘要: 剑指offer:面试题 17:合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新的链表的节点仍是按照递增排序的。
如:
list1: 1 --> 3 --- >5;
list1: 2 --> 4 --- >6;
则新链表为 :1 --> 2 --> 3 --> 4 --> 5 --> 6

节点:

ListNode4:

class ListNode4{
int value;
ListNode4 next;

public ListNode4() {
super();
}
public ListNode4(int value) {
super();
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public ListNode4 getNext() {
return next;
}
public void setNext(ListNode4 next) {
this.next = next;
}
}

MergeList:

public ListNode4 merge(ListNode4 list1,ListNode4 list2){
if (list1 == null && list2 == null) {
return null;
}else if (list1 == null) {
return list2;
}else if (list2 == null) {
return list1;
}
ListNode4 mergeListHead = null;
if (list1.getValue() < list2.getValue()) {
mergeListHead = list1;
ListNode4 next = merge(list1.getNext(), list2);
mergeListHead.setNext(next);
}else {
mergeListHead = list2;
ListNode4 next = merge(list1, list2.getNext());
mergeListHead.setNext(next);
}
return mergeListHead;
}

public ListNode4 init1(){
ListNode4 node1 = new ListNode4(1);
ListNode4 node2 = new ListNode4(3);
ListNode4 node3 = new ListNode4(5);
node1.setNext(node2);
node2.setNext(node3);
return node1;
}
public ListNode4 init2(){
ListNode4 node1 = new ListNode4(2);
ListNode4 node2 = new ListNode4(4);
ListNode4 node3 = new ListNode4(6);
node1.setNext(node2);
node2.setNext(node3);
return node1;
}

测试:

public static void main(String[] args) {
MergeList mergeList = new MergeList();
ListNode4 list1 = mergeList.init1();
ListNode4 list2 = mergeList.init2();
ListNode4 newList = mergeList.merge(list1, list2);
while(newList.getNext() != null){
System.out.print(newList.getValue());
newList = newList.getNext();
if (newList.getNext() == null) {
System.out.println(newList.getValue());
}
}
}

结果:

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