博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5.15 - Stacks and Queues
阅读量:5796 次
发布时间:2019-06-18

本文共 2085 字,大约阅读时间需要 6 分钟。

Solution1: Reverse and Compare

翻转整个Linked List, 然后用两个指针进行逐一比对

Solution2: Iterative Approach -> use Stack

boolean isPalindrome(ListNode head) {    ListNode fast = head;    ListNode slow = head;        Stack
stack = new Stack
(); while (fast != null && fast.next != null) { stack.push(slow.data); slow = slow.next; fast = fast.next.next; }// Has odd number of elements, so skip the middle element if (fast != null) { slow = slow.next; } while (slow != null) { int top = stack.pop().intValue(); /* If values are different, then it's not a palindrome */ if (top != slow.data) { return false; } slow = slow.next; } return true;}

```

Recursive Approach
Q: How recursive function would work?
A:

Q: How can we get to the end of the list? How can we compare node i with node n - i?

从head 开始遍历,但是从中间开始做compare

class Result {    public ListNode node;    public boolean result;}/* Result当中 {    node 存储的是当前遍历的指针位置        result表示当前比较的结果 }*/boolean isPalindrome(ListNode head) {    int length = getLength(head);    Result p = isPalindromeRecurse(head, length);    return p.result;}Result isPalindromeRecurse(ListNode head, int length) {        // 递归的出口     if (head == null || length <= 0) {         //if the input is null  or the head points to the middle of the list        return new Result(head, true);    } else if (length == 1) {         // if the middle + 1 of the list          return new Result(head.next, true);    }        // 递归的调用    Result res = isPalindromeRecurse(head.next, length - 2);    if (!res.result || res.node == null) {        return res;    }    // result    res.result = (head.data == res.node.data);    /* Return corresponding node. */    //在递归出口之前 将指针右移    res.node = res.node.next;        return res;}

160. Intersection of Two Linked Lists (cc189 2.7)

Q: insersection 节点之后的ListNode 全部重合,

至少要遍历一遍linkedlist
只给了两个头结点,主要问题在于当两个list的长度不一致的时候,如何进行intersection的确定? 链表的遍历是否要同步? 这样会出现headA超前headB的情况

转载于:https://www.cnblogs.com/kong-xy/p/9049041.html

你可能感兴趣的文章
Spark API编程动手实战-07-join操作深入实战
查看>>
H3C-路由策略
查看>>
EasyUI基础入门之Easyloader(载入器)
查看>>
Uva 839 Not so Mobile
查看>>
程序猿必备 MyEclipse2013-2014系列
查看>>
java中ArrayList 、LinkList区别
查看>>
Spring ’14 Wave Update: Installing Dynamics CRM on Tablets for Windows 8.1
查看>>
利用rand7()构造rand10()
查看>>
MySQL 备份与恢复
查看>>
吃午饭前,按书上的代码写会儿--Hunt the Wumpus第一个版本
查看>>
easyui中combobox的值改变onchang事件
查看>>
TEST
查看>>
PAT A1037
查看>>
ReactiveSwift源码解析(三) Signal代码的基本实现
查看>>
(六)Oracle学习笔记—— 约束
查看>>
[Oracle]如何在Oracle中设置Event
查看>>
top.location.href和localtion.href有什么不同
查看>>
02-创建hibernate工程
查看>>
information_schema系列五(表,触发器,视图,存储过程和函数)
查看>>
瓜子二手车的谎言!
查看>>