Dead Code Preservation :: Archived AS3 works from wonderfl.net

mx.utls.LinkedListの使い方が分からない

pushすると謎のvalue=0のnodeが両端に入ってきて超邪魔。
(出力の3行目)

1個も入ってない状態だと、node = linkedList.headでnullが入るので
結局whileの条件を2個書くことになる。
どうするのが正しいのこれ?
Get Adobe Flash player
by tail_y 15 Feb 2012
  • Related works: 1
  • Talk

    tail_y at 15 Feb 2012 02:26
    @noppikinattaさんによると、 while(node != linkedList.tail) ではないかとのこと。
    tail_y at 15 Feb 2012 02:32
    でもこれ、毎回参照するのが嫌だから var tail:LinkedListNode = linkedList.tail; って変数に落としておくと 今度は走査中にtail引っこ抜かれたらバグる。nullチェックならなんとか問題ないのに
    tail_y at 15 Feb 2012 10:40
    tailでのチェックはよく考えたらバグる。 今のところ、DameNegiさんがやってる、1度ifでチェックしてから、nextのチェックというのがベストっぽいけど、ベストなのに残念感が凄いコードになっちゃう! どうしてこうなったん。
    Embed
/**
 * Copyright tail_y ( http://wonderfl.net/user/tail_y )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/qTUM
 */

package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import mx.utils.LinkedListNode;
    import mx.utils.LinkedList;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            var linkedList:LinkedList = new LinkedList();
            linkedList.push("a");
            linkedList.push("b");
            var display:Array = [];
            
            var node:LinkedListNode = linkedList.head;
            while(node != null){ // 普通LinkedListってこうやるんじゃないの?個数0の時はhead=nullだし
                display.push("node=" + node + " node.value=" + node.value);
                node = node.next;
            }
            display.push("");
            
            display.push(node == linkedList.tail);    // この最後のnodeは、tailですらない意味不明。
            
            display.push("");
            
            node = linkedList.head;
            while(node != null && node.value != null){ // こうするしか無いの?なんて無駄な
                display.push("node=" + node + " node.value=" + node.value);
                node = node.next;
            }
            display.push("");
            
            
            //
            var tf:TextField = new TextField();
            tf.width = 400;
            tf.height = 400;
            tf.text = display.join("\n");
            addChild(tf);
        }
    }
}