首页 > 试题广场 >

访问单个节点的删除

[编程题]访问单个节点的删除
  • 热度指数:17823 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定一个单向链表中的某个节点,请删除这个节点,但要求只能访问该节点。若该节点为尾节点,返回false,否则返回true


说明:本题目包含复杂数据结构ListNode,点此查看相关信息
说真的,不知道这个题目想干嘛!
发表于 2021-02-22 17:30:39 回复(0)
//不删这个节点了,把下个节点值copy过来,然后删除下个节点
public boolean removeNode(ListNode pNode) {
        if(pNode==null||pNode.next==null) return false;
        pNode.val=pNode.next.val; //pNode.val=pNode.val笔误这样写也能AC,测试用例无力吐槽
        pNode.next=pNode.next.next;
        return true;
    }

编辑于 2017-05-11 19:55:31 回复(7)
import java.util.*;

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Remove {
    public boolean removeNode(ListNode pNode) {
      
        
        if(pNode.next==null)
            return false;
        
        ListNode next_node= pNode.next;
        // 将待删除节点的下一个节点的值 赋值给待删除的节点,然后删除 待删除节点的下一个节点
        pNode.val=next_node.val;
        pNode.next=next_node.next;
       // 将下一个节点赋值为null  让GC回收 
      next_node=null;  

        return true;
    }
}
发表于 2017-03-26 14:59:55 回复(0)
本题高票答案一定是看了C语言的实现,才那样写的。
在Java中的引用和C语言的指针是不一样的。
public class Remove {
    public boolean removeNode(ListNode pNode) {
        // write code here
        if (pNode == null) {
            return false;
        }
        if (pNode.next == null) {
            pNode = null;
            return false;
        } else {
            pNode = pNode.next;
        }
        return true;
    }
}

编辑于 2017-03-23 13:46:07 回复(0)
我是真正的删除的pNode.
public class Remove {
    public boolean removeNode(ListNode pNode) {
        // write code here
        if (pNode == null) {
            return false;
        }
        
        if (pNode.next == null) {
            pNode = null;
            return false;
        }
        
        ListNode tmp = pNode;
        pNode = pNode.next;
       	tmp = null;
        return true;
    }
}

发表于 2017-01-22 11:04:55 回复(0)

问题信息

难度:
5条回答 29311浏览

热门推荐

通过挑战的用户

查看代码