5.15 - Stacks and Queues
Solution1: Reverse and Compare
翻转整个Linked List, 然后用两个指针进行逐一比对
Solution2: Iterative Approach -> use Stack
boolean isPalindrome(ListNode head) { ListNode fast = head; ListNode slow = head; Stack<Integer> stack = new Stack<Integer>(); 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 <= ) { //if the input is null or the head points to the middle of the list return new Result(head, true); } else if (length == ) { // if the middle + 1 of the list return new Result(head.next, true); } // 递归的调用 Result res = isPalindromeRecurse(head.next, length - ); 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的情况
相关推荐
HMHYY 2020-07-28
ELEMENTS爱乐小超 2020-07-04
amazingbo 2020-06-28
alicelmx 2020-06-16
minkee 2020-06-09
逍遥友 2020-06-02
嗡汤圆 2020-05-10
whbing 2020-05-05
zhuxianfeng 2020-05-02
assastor 2020-05-01
JessePinkmen 2020-05-01
hongxiangping 2020-04-30
theta = np.zeros #theta = array,构造全为零的行向量。grad[0,j] = np.sum/len #∑term / m. return value > threshol
Kwong 2020-04-26
88483063 2020-04-23
xirongxudlut 2020-04-19