一、CRC備援碼
查漏補缺:CRC備援碼+雙向連結清單插入+實作利用棧括号比對 二、雙向連結清單的插入
s->next = p->next;
s->prior = p;
p->next = s;
p->next->prior = s;
三、棧實作括号比對
public boolean isValid(String s){
Stack<Character> stack = new Stack<Character>();
for(char c : s.toCharArray()){
if(c == '(') stack.push(')');
if(c == '[') stack.push(']');
if(c == '{') stack.push('}');
if(stack.isEmpty() || c!=stack.pop()) return false;
}
return stack.isEmpty();
}
四、手寫雙向連結清單
// 二、雙端連結清單
class DoubleLinked {
private Node head, tail;//頭結點和尾結點
private int size;//連結清單的元素數目
public DoubleLinked() {
head = new Node(0, 0);
tail = new Node(0, 0);
head.next = tail;
tail.prev = head;
size = 0;
}
// 在頭部插入node結點
public void addFirst(Node x) {
x.prev = head;
x.next = head.next;
head.next.prev = x;
head.next = x;
size++;
}
// 移除指定結點
public void remove(Node x) {
x.prev.next = x.next;
x.next.prev = x.prev;
size--;
}
// 删除連結清單的第一個結點,并傳回該結點
public Node removeLast() {
if(head.next == tail) return null;//傳回空
Node last = tail.prev;
remove(last);//删除尾結點;
return last;
}
public int size() {
return size;
}
}