链表的尾插法及整表删除

链表的尾插法

头插法:将新节点永远插在头结点的后方,虽然简便,但在遍历时会时顺序颠倒,尾插法很好的解决了这个问题。
在使用尾插法时,需要定义插入结点的前结点,或者将其定义为尾巴结点,
使用方法先时先判断,如果链表为空,即根节点的后继结点为空时,直接插入即可,与头插法相同,而当不为空时,说明有后继结点,此时需遍历找到尾巴结点,当pnode的next==null时,说明为最后一个结点,将想插入的结点插入即可。
代码如下:

 public void insertForTail(Object data){
         //node为插入结点
         //pnode为其前驱结点
         Node node =new Node(data);
         Node pnode=new Node();
         if(this.root.next==null)
         {
             node.next=root.next;
             root.next=node;
             System.out.println("根节点为空");
         }else{
             pnode=this.root.next;
             while(pnode.next!=null){
                 pnode=pnode.next;
             }
             node.next=pnode.next;
             pnode.next=node;
             System.out.println("根节点不为空,插入成功");
         }

     }

也可在想要插入的位置插入:原理同上,但要注意,如果要插入第一个位置,无论是否链表为空,都直接在根节点后方插入

public void insertForTail(int n,Object data){
         //node为插入结点
         //pnode为其前驱结点
         Node node =new Node(data);
         Node pnode=new Node();
         if(this.root.next==null||n==1)
         {
             node.next=root.next;
             root.next=node;
         }
         else{
             pnode=this.root;
             int j=1;
             while(pnode.next!=null&&j<n){
                 pnode=pnode.next;
                 j++;
             }
             node.next=pnode.next;
             pnode.next=node;
         }

     }

整表删除

创建两个结点用来标记删除结点及后继结点,

public void link_alldelete(Linkedlist linkedlist){
       Node node=new Node();
       Node pnode=new Node();
       pnode=linkedlist.root.next;
       while (pnode!=null){
           node=pnode.next;
           pnode.free();
           pnode=node;
       }
       linkedlist.root.next=null;
       System.out.println("删除完成");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值