Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6598774
  • 博文数量: 227
  • 博客积分: 10047
  • 博客等级: 上将
  • 技术积分: 6678
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-11 10:33
个人简介

网上的蜘蛛

文章分类

全部博文(227)

文章存档

2010年(19)

2009年(29)

2008年(179)

分类: Java

2009-02-13 14:50:16

下面是关于链表结构的代码:
 

class ListNode{
        List<ThreePoints> element;
        int flag;
        ListNode next;
        
        public ListNode(List<ThreePoints> ele,int f){
              this(ele,null,f);
        }
        public ListNode(List<ThreePoints> ele,ListNode n,int f){
            element = ele;
            next = n;
            flag =f;
        }
    }
    
    
    class LinkedList{
        ListNode header;
        int size;
        public LinkedList(){
            header = new ListNode(null,-1);
            size = 0;
        }
public void insert(ListNode newnode){
            ListNode temp = header;
            while(temp.next != null){
                temp = temp.next;
            }
            temp.next = newnode;
            size++;
        }

我们对要插入的node初始化:

ListNode newnode =  new ListNode(List list,12);

然后初始化链表LinkedList newlinkedlist =  new LinkedList();

最后插入:newlinkedlist.insert(newnode);

这样没有问题。但是不是所有插入情况都没有问题。

比如,如果我们做链表拷贝动作。先从一个已知链表逐个读取ListNode,然后插入新的链表。

LinkedList newlinkedlist = new LinkedList()//新的链表空的


  ListNode newnode = linkedlist.header;//要被拷贝的链表的头结点

  while(newnode.next != null){
      newnode = newnode.next;
      int oldflag = (int)(newnode.flag/10);
      if(oldflag == newflag){
                //如果我们直接写成如下的就出错了


                /**wrong**********/

                 // newlinkedlist.insert(newnode);


                  /**wrong****而是要写成如下******/
                List<ThreePoints> list1 = newnode.element;
                int flag = newnode.flag;
                ListNode newnode2 = new ListNode(list1,flag);
                newlinkedlist.insert(newnode2);
  }

开始程序执行的时候,再插入一个newnode之后,就死机了。找好好久才发现问题所在:原来,每个newnode刚从oldList上面读取出来后,其next指向的仍然是oldList上面的某个界面,也就是newnode.next != null。这就错啦,因为我们要再插入下一个节点的时候,看insert方法,是判断当前节点的next为null的时候才插入的,现在不为空,所以就错了。解决方法,就是读取数据后,重新做一个ListNode的某个实例,这样它的next就被初始化为null。所以间的链表还是需要注意好多东西的,否则连自己的摸不着头脑了。共勉之~

阅读(8378) | 评论(0) | 转发(0) |
0

上一篇:扬起尘土

下一篇:请不要哭泣

给主人留下些什么吧!~~