2017-07-28 21 views
0

需要了解如何更新sortingPtr變量。如何在下面的代碼中更新sortingPtr變量?

public class MergeSortedLinkedLists { 

     public static Node mergeLinkedLists(Node head1, Node head2, Node mergedHead){ 
      Node sortingPtr = null; 
      if(head1 == null && head2 != null){ 
       return head2; 
      } 
      if(head1 == null && head2 == null){ 
       return mergedHead; 
      } 
      while(head1 != null && head2 != null){ 
       System.out.println("head1.data - " + head1.data); 
       System.out.println("head2.data - " + head2.data); 
       System.out.println("sortingPtr - " + sortingPtr); 
       /*while(sortingPtr != null){ 
        System.out.print("sortingPtr.data - " + sortingPtr.data + " "); 
        sortingPtr = sortingPtr.next; 
       }*/ 
       System.out.println(); 
       if(head1.data < head2.data){ 
        System.out.println("head1 < head2"); 
        if(mergedHead != null){ 
         mergedHead.next = head1; 
         mergedHead = head1; 
        } else{ 
         sortingPtr = head1; 
         mergedHead = head1; 
        } 
        head1 = head1.next; 
       } else{ 
        System.out.println("head2 < head1"); 
        if(mergedHead != null){ 
         mergedHead.next = head2; 
         mergedHead = head2; 
        } else{ 
         sortingPtr = head2; 
         mergedHead = head2; 
        } 
        head2 = head2.next; 
       } 
      } 

      if(head1 == null){ 
       mergedHead.next = head2; 
      } 
      if(head2 == null){ 
       mergedHead.next = head1; 
      } 
      return sortingPtr; 
     } 

     public static void main(String[] args) { 
      SinglyLinkedList linkedList1 = new SinglyLinkedList(); 
      linkedList1.head = linkedList1.new Node(10); 
      linkedList1.head.next = linkedList1.new Node(50); 
      linkedList1.head.next.next = linkedList1.new Node(70); 
      linkedList1.head.next.next.next = linkedList1.new Node(90); 
      linkedList1.head.next.next.next.next = linkedList1.new Node(100); 

      SinglyLinkedList linkedList2 = new SinglyLinkedList(); 
      linkedList2.head = linkedList2.new Node(20); 
      linkedList2.head.next = linkedList2.new Node(30); 
      linkedList2.head.next.next = linkedList2.new Node(40); 
      linkedList2.head.next.next.next = linkedList2.new Node(60); 
      linkedList2.head.next.next.next.next = linkedList2.new Node(80); 

      SinglyLinkedList mergedList = new SinglyLinkedList(); 
      mergedList.head = null; 
      mergedList.head = mergeLinkedLists(linkedList1.head, linkedList2.head, mergedList.head); 

      Node head = mergedList.head; 
      while(head != null){ 
       System.out.print(head.data + " "); 
       head = head.next; 
      } 
     } 
    } 

    class SinglyLinkedList{ 
     Node head; 
     class Node{ 
      int data; 
      Node next; 

      Node(int data){ 
       this.data = data; 
       next = null; 
      } 
     } 
    } 

我想合併2個排序的鏈接列表。 mergeLinkedLists方法返回sortingPtr變量中合併列表的頭部。但我想了解如何更新sortingPtr變量以返回上述代碼中合併列表的頭部。

+1

值'sortingPtr = head1;'? –

+0

但是head1最終會有值90和100. sotringPtr將會有合併列表 – Lizzie

回答

0
else{ 
         sortingPtr = head1; 
         mergedHead = head1; 
        } 

else{ 
         sortingPtr = head2; 
         mergedHead = head2; 
        } 

碼的這些嵌段確保當mergedHead爲空(即,合併過程還沒有開始),那麼我們sortingPtr的值設置爲的mergedHead

相關問題