Java数据结构与算法之——如何在只给定单链表中某个节点的指针的情况下删除该节点

1.问题

  链表1--2--3--4--5--6--7 中指向第五个元素的指针,要求把节点5删除,删除之后链表变为 1--2--3---4--6--7

2.问题分析

   通常,要删除单链表中的一个节点P,首先选用找到节点P的前驱节点pre,然后通过pre.next=p.next来实现对节点P的删除。对于此问题的节点P的前驱节点无法获取到,因此不能使用常用的方法。

  1)如果这个节点是链表的最后一个节点,就无法删除该节点。

 2) 如果不是链表的最后一个节点。

          第一:找到该节点的后继节点。将后继节点的date域的值复制给当前节点。

         第二:用常用的方法来删除后继节点。

3 代码实现

package linkedlist.Delete;



public class deleteNode {
    public static void printlist(LNode head){
        for (LNode cur=head.next;cur!=null;cur=cur.next){
            System.out.print(cur.date+" ");
        }
    }

    public static boolean deletenode(LNode p){
        if (p==null||p.next==null){
            return false;
        }
        p.date=p.next.date;
        LNode tmp=p.next;
        p.next=tmp.next;
        return true;
    }

    public static void main(String[] args) {
        int i=1;
        LNode head=new LNode();
        head.next=null;
        LNode tmp=null;
        LNode cur=head;
        LNode p=null;
        for (;i<8;i++){
            tmp=new LNode();
            tmp.date=i;
            tmp.next=null;
            cur.next=tmp;
            cur=tmp;
            if (i==5){
                p=tmp;
            }
        }
        System.out.print("原链表");
        printlist(head);
        System.out.println("\n删除节点P之后:");
        boolean deletenode = deletenode(p);
        if (deletenode){
            System.out.println("删除成功,删除后节点为:");
            printlist(head);
        }else {
            System.out.println("删除失败");
        }
    }
}

   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值