實現乙個巢狀類doublenode用來構造雙向鍊錶,其中每個結點都含有乙個指向前驅元素的引用和乙個指向後續元素的引用(如果不存在則為null)。為以下任務實現若干靜態方法:在頭插入結點、在表尾插入結點、從表頭刪除結點、從表尾刪除結點、在指定結點前插入新結點、在指定結點之後插入新結點、刪除指定結點
先編寫乙個內部的巢狀類doublenode,存在3個類變數item值,next和previous
只嘗試用乙個私有變數first指向鍊錶的第乙個元素
然後按照思路編寫方法.先不用靜態的.感覺麻煩.用普通的方法
package hk13;
import edu.princeton.cs.algs4.stack;
/** * @description: $
* @create: 2019-02-20
**/public class w_1_3_31
private doublenode first;
public doublenode getfirst()
public boolean isempty()
public void insertfromhead(item item)
}public void insertfromtail(item item)
doublenode last = new doublenode();
last.item = item;
last.previous = current;
current.next = last;
}public item deletefromhead()
public item deletefromtail()
item item = (item) current.item;
current.previous.next = null;
return item;
}public void insertbefore(doublenode homenode, doublenode newnode)
public void insertafter(doublenode homenode, doublenode newnode)
public item deletenode(doublenode deletednode)
public void printlinkedlist()
system.out.println("鍊錶的樣子");
結果說明:
1.先從頭插入,依次為
ab-a
c-b-a
2.從尾插入,依次為
c-b-a-d
c-b-a-d-e
c-b-a-d-e-f
3.刪除頭部元素
b-a-d-e-f
4.刪除尾部元素
b-a-d-e
5.先找到第二個元素a.在a的前面插入元素x
b-x-a-d-e
6.在a的後面插入元素y
b-x-a-y-d-e
7.插入指定元素a
b-x-y-d-e
一,有幾種特殊情況沒有特別考慮:
1,表裡面只有1個節點
2,表為null
二,看答案別人,除了用first還用了last
暫時先這樣
演算法 第四版 練習1 3 40解答
前移編碼。從標準輸入讀取一串字元,使用鍊錶儲存這些字元並清除重複字元。當你讀取了乙個從未見過的字元時,將它插入表頭。當你讀取了乙個重複的字元時,將它從鍊錶中刪去並再次插入表頭。將你的程式命名為movetofront 它實現了著名的前移編碼策略,這種策略假設最近訪問過的元素很可能會再次訪問,因此可以用...
演算法 第四版 練習1 2 10解答
1.編寫乙個類visualcounter,支援加一和減一操作。2.它的建構函式接受兩個引數n和max,其中n指定了 操作的最大次數,max指定了計數器的最大絕對值。3.作為 用影象顯示每次計數器變化後的值。看得懂1和2,看不懂3,1和2的函式好寫,3不知道什麼意思 通過看別人的答案才知道3就是函式 ...
演算法 第四版 練習1 3 30解答
編寫乙個函式,接受一條鍊錶的首結點作為引數,破壞性地 將鍊錶反轉並返回結果鍊錶的首結點。自己寫不出來,參考書上的提示 1.迴圈法 2.遞迴法 遞迴法看不懂,談談迴圈法 使用變數first不斷加1 使用變數second first.next 不斷加1 使用reverse不斷加1.記錄後面那個節點.遍歷...