1. 程式人生 > >"Coding Interview Guide"--打印兩個有序鏈表的公共部分

"Coding Interview Guide"--打印兩個有序鏈表的公共部分

面試指南 class -- node 節點 pan code head div

題目

  給定兩個有序鏈表的頭指針head1和head2,打印兩個鏈表的公共部分。

分析

  鏈表可能為空也可能非空,而對於空鏈表程序不需要進行任何操作;若是非空鏈表,因為鏈表有序,所以要麽是遞增,要麽是遞減。

  假設兩個鏈表元素是有序遞增,用head1和head2依次訪問鏈表元素,那麽有四種情況:

  1、如果head1的值小於head2的值,則說明需要在鏈表1的後續節點中尋找公共節點,此時向後移動head1,不必移動head2;

  2、如果head1的值大於head2的值,則說明需要在鏈表2的後續節點中尋找公共節點,此時向後移動head2,不必移動head1;

  3、如果head1的值等於head2的值,說明當前節點正是這兩個鏈表的公共部分,打印,然後head1和head2同時向後移,尋找下一個公共節點;

  4、如果head1或者head2任何一個移動到null,說明已完成尋找公共節點的過程,此時整個算法結束。

    

 1 public static void printCommon(Node head1, Node head2)
 2 {
 3     while(head1 != null || head2 != null)
 4     {
 5         if(head1.value < head2.value)
 6         {
 7             head1 = head1.next;
 8         }
 9         else
if(head1.value > head2.value) 10 { 11 head2 = head2.next; 12 } 13 else 14 { 15 System.out.println(head1.value); 16 head1 = head1.next; 17 head2 = head2.next; 18 } 19 } 20 }

來源:左程雲老師《程序員代碼面試指南》

"Coding Interview Guide"--打印兩個有序鏈表的公共部分