【问题标题】:Reverse and Compare Palindrome Solution (Cracking the Coding Interview)逆向和比较回文解决方案(破解编码面试)
【发布时间】:2016-12-30 17:30:28
【问题描述】:

所以我正在阅读《Cracking the Coding Interview》一书。我正在解决这个问题:

“实现一个函数来检查一个链表是否是回文”

我注意到第一个解决方案(第 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;
}

【问题讨论】:

  • 因为它是 linked 列表中的一个节点。

标签: java linked-list palindrome


【解决方案1】:

在链表中,每个节点都拥有自己的数据和对链表中下一个节点的引用(也可能在双向链表中还指向前一个项目,这里似乎不是这种情况) .所以你真的不需要列表包装​​器来获取它的所有数据,只需要一个对第一个节点(头部)的引用,如你包含的 sn-p 所示。

【讨论】:

    猜你喜欢
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多