Java合并两个单链表,要求合并后的链表保持有序
课程:尚硅谷 韩顺平老师《数据结构》
语言:Java
课后练习题目要求: 合并两个单链表,且合并后的链表仍保持有序。
题解:
public class withTwoLinkedList { public static void main(String[] args){ Node node1 = new Node(1,"jack"); Node node2 = new Node(3,"mike"); Node node3 = new Node(7,"amy"); Node node4 = new Node(2,"zoey"); Node node5 = new Node(6,"bob"); Node node6 = new Node(9,"tom"); SingleLinkedList singleLinkedList1 = new SingleLinkedList(); SingleLinkedList singleLinkedList2 = new SingleLinkedList(); singleLinkedList1.addByOrder(node1); singleLinkedList1.addByOrder(node2); singleLinkedList1.addByOrder(node3); singleLinkedList2.addByOrder(node4); singleLinkedList2.addByOrder(node5); singleLinkedList2.addByOrder(node6); System.out.println("第一个链表: "); singleLinkedList1.list(); System.out.println("第二个链表: "); singleLinkedList2.list(); with2list(singleLinkedList1.getHead(),singleLinkedList2.getHead()); System.out.println("合并后的链表是"); singleLinkedList2.list(); } public static Node with2list(Node head1,Node head2){ if (head1.next == null && head2.next ==null){ return null; } if (head1.next == null){ return head2; } if (head2.next == null){ return head1; } Node head = null; if (head1.no > head2.no) { //把head较小的结点给头结点 head = head2; //继续递归head2 head.next = with2list(head1, head2.next); } else { head = head1; head.next = with2list(head1.next, head2); } return head; } } class SingleLinkedList { private Node head = new Node(0, ""); public Node getHead() { return head; } public void addByOrder(Node node){ Node temp = head; boolean flag = false; while (true){ if (temp.next == null){ break; } if (temp.next.no>node.no){ break; }else if (temp.next.no == node.no){ flag = true; break; } temp = temp.next; } // if (flag){ System.out.printf("欲插入的编号%d 已经存在不能加入 ",node.no); }else { node.next = temp.next; temp.next = node; } } //显示链表 public void list(){ //判断链表是否为空 if(head.next == null){ System.out.println("链表为空"); return; } Node temp = head.next; while(true){ if (temp == null){ break; } System.out.println(temp); temp = temp.next;//一定记住temp后移不然是一个死循环。 } } } class Node{ public int no; public String data; public Node next; public Node(int no,String data){ this.no = no; this.data = data; } @Override public String toString(){ return "Node [no=" + no + ",data="+ data + "]"; } }
编程小白,数据结构真滴好好玩哦(*^▽^*),希望在暑假学完这门课程~有问题请指教!