"Coding Interview Guide"--打印兩個有序鏈表的公共部分
阿新 • • 發佈:2019-05-16
面試指南 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 elseif(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"--打印兩個有序鏈表的公共部分