標籤:java
單鏈表中的簡單演算法
/** * 得到兩個單鏈表的公用結點 * 先求出兩個鏈表的長度,並求出二者的差值dif,兩個指標分別指向鏈表頭部,讓指向長的鏈表的指標先向鏈表尾部移動dif步。 * 最後一起一步步移動兩個指標,當兩個指標都指向同一個結點時,返回那個結點 * @param list1 * @param list2 * @return */public static ListNode getFirstCommonNode(ListNode list1,ListNode list2){if(list1==null || list2==null){return null;}int length1 = getListLength(list1);int length2 = getListLength(list2);ListNode longList = list2;ListNode shortList = list1;int dif = length2 - length1;if(length1 > length2){longList = list1;shortList = list2;dif = length1 - length2;}while(dif>0){longList = longList.getNext();dif--;}while(longList!=null && shortList!=null && longList!=shortList){longList = longList.getNext();shortList = shortList.getNext();}return longList;}/** * 得到鏈表的長度 * @param list * @return */public static int getListLength(ListNode list){int length = 0;while(list != null){length++;list = list.getNext();}return length;}
Java-找出兩個單鏈表的首個公用節點