2016-12-30 45 views
1

所以我正在通過破解編碼面試書。我工作的這個問題:反轉和比較迴文解決方案(破解編碼採訪)

「實現一個函數來檢查,如果一個鏈表是迴文」

我注意到,第一個解決方案(第217頁),只提供了一個節點作爲參數傳遞給函數,而不是整個列表。我只是想知道,函數如何知道列表中的下一個節點,沒有提供列表?

我已經提供了下面的代碼,以防萬一。

boolean isPalindrome(LinkedListNode head){ 
    LinkedListNode reversed = reverseAndClone(head); 
    return isEqual(head, reversed); 
} 
LinkedListNode reverseAndClone(LinkedListNode node){ 
    LinkedListNode head = null; 
    while(node != null){ 
    LinkedListNode n = new LinkedListNode(node.data); 
    n.next = head; 
    head = n; 
    node = node.next; 
    } 
    return head; 
} 

boolean isEqual(LinkedListNode one, LinkedListNode two) { 
    while(one != null && two != null){ 
    if (one.data != two.data){ 
     return false; 
    } 
    one = one.next; 
    two = two.next; 
    } 
return one == null && two == null; 
} 
+1

因爲它是來自**鏈接**列表的節點。 – jonrsharpe

回答

1

在一個鏈表,每個節點都擁有自己的數據,併到下一個節點列表(參考,也可能上一個項目,在雙向鏈表,這似乎不被這裏的情況)。因此,您不需要列表包裝​​來獲取其所有數據,只需引用第一個節點(頭部),如所包含的代碼片段所示。