1. 程式人生 > >兩個有序鏈表的合並

兩個有序鏈表的合並

return 所有 相同 [] ack nod 依然 一個 next

已知兩個鏈表head1和head2各自有序,請把它們合並成一個依然有序的鏈表。結果鏈表要包含head1和head2的所有節點,及節點值相同。

 1 package com;
 2 class Node{
 3     Node next = null;
 4     int data;
 5     public Node(int data){
 6         this.data = data;
 7     }
 8 }
 9 
10 public class MergeList {
11     public static Node mergeList(Node head1, Node head2){
12 if (head1 == null){ 13 return head1; 14 } 15 if (head2 == null){ 16 return head2; 17 } 18 Node p1 = null; 19 Node p2 = null; 20 Node head = null; 21 if (head1.data < head2.data){ 22 head = head1;
23 p1 = head1.next; 24 p2 = head2; 25 } else { 26 head = head2; 27 p1 = head1; 28 p2 = head2.next; 29 } 30 Node pcur = head; 31 while (p1 != null && p2 != null) { 32 if (p1.data < p2.data) {
33 pcur.next = p1; 34 pcur = p1; 35 p1 = p1.next; 36 } else { 37 pcur.next = p2; 38 pcur = p2; 39 p2 = p2.next; 40 } 41 } 42 if (p1 != null){ 43 pcur.next = p1; 44 } 45 if (p2 != null){ 46 pcur.next = p2; 47 } 48 return head; 49 } 50 public static void main(String[] args){ 51 Node head1 = new Node(1); 52 Node node3 = new Node(3); 53 Node node5 = new Node(5); 54 head1.next = node3; 55 node3.next = node5; 56 node5.next = null; 57 Node head2 = new Node(2); 58 Node node4 = new Node(4); 59 Node node6 = new Node(6); 60 Node node7 = new Node(7); 61 head2.next = node4; 62 node4.next = node6; 63 node6.next = node7; 64 node7.next = null; 65 Node mergeHead = mergeList(head1, head2); 66 while (mergeHead != null){ 67 System.out.print(mergeHead.data + " "); 68 mergeHead = mergeHead.next; 69 } 70 } 71 }

兩個有序鏈表的合並