Re: [問題] 有關linklist的問題
※ 引述《pinkputing (pink)》之銘言:
: 請問有人可以幫我解釋一下這段程式嗎?
: class LinkNode {
: int data; LinkNode link;
: LinkNode(int x, LinkNode L) {
: this.data=x; this.link=L;
: }
: }
: class LinkList {
: LinkNode head;
: public static LinkList create() {
: LinkNode h=null;
: for(int i=5; i>=0; i--) {
: LinkNode t=new LinkNode(i, h);
: h=t;
: }
after Loop 1:
i = 5;
t,h
↓
┌─┬┐
│ 5│┼→null
└─┴┘
after Loop 2:
t,h
↓
┌─┬┐ ┌─┬┐
│ 4│┼→│ 5│┼→null
└─┴┘ └─┴┘
...
after Loop 6:
t,h
↓
┌─┬┐ ┌─┬┐ ┌─┬┐ ┌─┬┐ ┌─┬┐ ┌─┬┐
│ 0│┼→│ 1│┼→│ 2│┼→│ 3│┼→│ 4│┼→│ 5│┼→null
└─┴┘ └─┴┘ └─┴┘ └─┴┘ └─┴┘ └─┴┘
↑
ans.head [因為最後 ans.head = h;]
由此印出的結果會是
[ 0, 1, 2, 3, 4, 5, ]
: LinkList ans=new LinkList();
: ans.head=h;
: return ans;
: }
: public String toString() {
: String ans=" [ ";
: for(LinkNode t=this.head; t!=null; t=t.link) {
: ans+= t.data; ans+=", ";
: }
: ans+=" ] ";
: return ans;
: }
: public static void main(String[] _) {
: LinkList L1=LinkList.create();
: System.out.println(L1);
: LinkNode p=L1.head;
p p.link
↓ ↓
┌─┬┐ ┌─┬┐
│ 0│┼→│ 1│┼→...
└─┴┘ └─┴┘
: p=p.link;
p p.link
↓ ↓
┌─┬┐ ┌─┬┐ ┌─┬┐
│ 0│┼→│ 1│┼→│ 2│┼→...
└─┴┘ └─┴┘ └─┴┘
: LinkNode n1=new LinkNode(91, p.link);
p p.link
↓ ↓
┌─┬┐ ┌─┬┐ ┌─┬┐
│ 0│┼→│ 1│┼→│ 2│┼→...
└─┴┘ └─┴┘ └─┴┘
┌─┬┐↑
│91│┼┘
└─┴┘
↑
n1
: LinkNode n2=new LinkNode(92, n1);
p p.link
↓ ↓
┌─┬┐ ┌─┬┐ ┌─┬┐
│ 0│┼→│ 1│┼→│ 2│┼→...
└─┴┘ └─┴┘ └─┴┘
┌─┬┐ ┌─┬┐↑
│92│┼→│91│┼┘
└─┴┘ └─┴┘
↑ ↑
n2 n1
: p.link=n2;
p
↓
┌─┬┐ ┌─┬┐ ┌─┬┐
│ 0│┼→│ 1│┼┐│ 2│┼→...
└─┴┘ └─┴┘│└─┴┘
┌───┬───┘↑
↓p.link┘ │
┌─┬┐ ┌─┬┐│
│92│┼→│91│┼┘
└─┴┘ └─┴┘
↑ ↑
n2 n1
因此執行結果為 [ 0, 1, 92, 91, 2, 3, 4, 5, ]
: System.out.println(L1);
: }
: }
: 執行結果為:
: [ 0, 1, 2, 3, 4, 5, ]
: [ 0, 1, 92, 91, 2, 3, 4, 5, ]
: 我不懂的是:
: 為什麼出來的結果是 0 1 2 3 4 5 而不是 5 4 3 2 1 0
: 92這個值怎麼會是在0,1的後面呢?
: 麻煩知道的人幫我解釋一下囉~謝謝哦
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.74.9.2
推
06/05 23:57, , 1F
06/05 23:57, 1F
推
06/06 00:29, , 2F
06/06 00:29, 2F
推
06/06 00:37, , 3F
06/06 00:37, 3F
推
07/03 15:30, , 4F
07/03 15:30, 4F