节点的数据结构:
public class ListNode { private int data; private ListNode next; public int getData() { return data; } public void setData(int data) { this.data = data; } public ListNode getNext() { return next; } public void setNext(ListNode next) { this.next = next; } }
将链表b中的元素插入到链表a中,升序排列(链表a,链表b都为升序)
/** * 升序 */ public class Main { public static void main(String[] args) { ListNode a = createListA(); ListNode b = createListB(); ListNode c = mergeList(a, b); traverseList(c); } /** * 链表元素为 2,4,6 * @return */ private static ListNode createListA(){ ListNode list = new ListNode(); ListNode node1 = new ListNode(); node1.setData(2); ListNode node2 = new ListNode(); node2.setData(4); ListNode node3 = new ListNode(); node3.setData(6); list.setNext(node1); node1.setNext(node2); node2.setNext(node3); return list; } /** * 链表元素为 1,3,5,7,9 * @return */ private static ListNode createListB(){ ListNode list = new ListNode(); ListNode node1 = new ListNode(); node1.setData(1); ListNode node2 = new ListNode(); node2.setData(3); ListNode node3 = new ListNode(); node3.setData(5); ListNode node4 = new ListNode(); node4.setData(7); ListNode node5 = new ListNode(); node5.setData(9); list.setNext(node1); node1.setNext(node2); node2.setNext(node3); node3.setNext(node4); node4.setNext(node5); return list; } private static ListNode mergeList(ListNode a , ListNode b){ ListNode p = a; ListNode pa = a.getNext(); ListNode qb = b.getNext(); while (pa != null && qb != null){ if(pa.getData() <= qb.getData()){ //如果a链表的节点数值小于b链表节点的数值, a链表往后移一个 p = pa; pa = pa.getNext(); }else{ //如果a链表的节点数值大于b链表的节点数值,将b中的节点取出存放在q,然后后移一个 ListNode q = qb; //然后将q插入到链表a中,必须保持p始终在pa的前一个位置 qb = qb.getNext(); q.setNext(pa); p.setNext(q); p = q; } } while(qb != null){ //如果链表a遍历完了 而链表b仍有元素未插入,将b的元素依次插到a的末尾 p.setNext(qb); p = p.getNext(); qb = qb.getNext(); } return a; } private static void traverseList(ListNode list){ ListNode node = list.getNext(); while(node != null){ System.out.println(node.getData()); node = node.getNext(); } } }
结果:1 2 3 4 5 6 7 9