题目:合并两个有序的单链表,合并之后的链表依然有序
一、思路:定义一个新的头结点,首先比较2个链表的1号节点,那个小就连起来,然后后移,在比较大小,在连起来。依次到最后为空截止。
代码如下(示例):
public HeroNode addtwolinkedlist(HeroNode head1, HeroNode head2) {
//新链表的头结点
HeroNode newhead = new HeroNode(0, "", "");
if (head1.next == null) {
return head2;
}
if (head2.next == null) {
return head1;
}
if (head1.next == null && head2.next == null) {
return null;
}
//设置链表一的临时指针
HeroNode temp1 = head1.next;
//设置链表二的临时指针
HeroNode temp2 = head2.next;
//设置新链表的临时指针
HeroNode temp = newhead;
while (temp1 != null && temp2 != null) {
if (temp1.no < temp2.no) {
temp.next = temp1;
temp1 = temp1.next;
} else if (temp1.no > temp2.no) {
temp.next = temp2;
temp2 = temp2.next;
}
temp = temp.next;
}
if (temp1==null){
temp.next=temp2;
}else {
temp.next=temp1;
}
return newhead.next;
}
2.测试代码
代码如下(示例):
HeroNode heroNode1 = new HeroNode(1, "林冲", "豹子头");
HeroNode heroNode2 = new HeroNode(2, "花荣", "小李广");
HeroNode heroNode3 = new HeroNode(3, "吴用", "智多星");
HeroNode heroNode4 = new HeroNode(4, "武松", "行者");
SingleLinkedList S1 = new SingleLinkedList();
S1.addOrder(heroNode2);
S1.addOrder(heroNode3);
SingleLinkedList S2 = new SingleLinkedList();
S2.addOrder(heroNode1);
S2.addOrder(heroNode4);
System.out.println("链表一为:");
S1.list();
System.out.println("链表二为:");
S2.list();
SingleLinkedList newsingleLinkedList = new SingleLinkedList();
HeroNode newhead = newsingleLinkedList.addtwolinkedlist(S1.getHead(), S2.getHead());
newsingleLinkedList.getHead().next= newhead;
System.out.println("合并后的链表为");
newsingleLinkedList.list();
总结
画图理清楚思路,只到跳出一个链表,将新链表的最后指向另一个断开链表的节点就行了。