java實現兩個有序連結串列合併為一個有序連結串列
阿新 • • 發佈:2018-12-04
節點類
public class Node { private Node next; private Integer number; Node(Integer number) { this.number=number; next=null; } Node() { } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } public Integer getNumber() { return number; } public void setNumber(Integer number) { this.number = number; } }
合併連結串列 public class SortForLink { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr1 = {1,3,6,8,23,34,56,77,90}; int[] arr2 = {-90,34,55,79,87,98,123,234,567}; Node link1 = new Node(); Node link2 = new Node(); Node link3 = new Node(); getLink(arr1,link1); getLink(arr2,link2); mergeLink(link1, link2, link3); viewLink(link3); } /** * 構建連結串列 * @param arr * @param link */ public static void getLink(int[] arr, Node link) { for(int i = 0; i < arr.length; i++) { link.setNumber(arr[i]); link.setNext(new Node()); link = link.getNext(); } } /** * 輸出連結串列 * @param link */ public static void viewLink(Node link) { while(link.getNumber() != null) { System.out.println(link.getNumber()); link = link.getNext(); } } /** * 合併連結串列 * @param link1 * @param link2 * @param link3 */ public static void mergeLink(Node link1, Node link2, Node link3) { if( (link2.getNumber() != null) && (link1.getNumber() == null || link1.getNumber() >= link2.getNumber()) ) { link3.setNumber(link2.getNumber()); link3.setNext(new Node()); link2 = link2.getNext(); link3 = link3.getNext(); mergeLink(link1, link2, link3); }else if( (link1.getNumber() != null) && (link2.getNumber() == null || link2.getNumber() > link1.getNumber()) ) { link3.setNumber(link1.getNumber()); link3.setNext(new Node()); link1 = link1.getNext(); link3 = link3.getNext(); mergeLink(link1, link2, link3); }else { System.out.println("==沒有了,結束啦!=="); } } }