小蜗牛1990 2016-01-22 02:52 采纳率: 50%
浏览 1413
已采纳

有关java的白痴问题,希望大神回答

Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.

Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node with value 3, the linked list should become 1 -> 2 -> 4 after calling your function.

/**

  • Definition for singly-linked list.
  • public class ListNode {
  • int val;
  • ListNode next;
  • ListNode(int x) { val = x; }
  • } */ public class Solution { public void deleteNode(ListNode node) { node=node.next; } } 不明白为什么这么赋值不可以。可不可以有大神系统的从原理讲解一下。
  • 写回答

6条回答 默认 最新

  • 毕小宝 博客专家认证 2016-01-22 09:08
    关注

    可以直接赋值的,因为你的ListNode的成员变量都是default权限即包内访问的,只要你的ListNode和Solution类在同一个包里面就可以了。
    你的删除方法有问题,先要查找到待删除节点,然后再删除。修正你的Solution代码如下:

     public class Solution {
        public void deleteNode(ListNode list,ListNode node) {
            //空链表
            if(node==null||list==null||list.getNext()==null){
                return ;
            }
    
            //查找node节点
            ListNode curNode = list;
            ListNode preNode = null;
            ListNode next = list.next;
            while(curNode!=null){
                if(curNode.val==node.val){//找到
                    System.out.println("找到待删除对象了。"+node.val);
                    break;
                }
                preNode = curNode;
                curNode = next;
                next = next.next;
            }
    
    
            //删除node节点 
            if(preNode==null){
                //第一个元素删除操作直接修正list为next:curNode-next
                list = next;
            }else{
                //删除中间节点中间:preNode-curNode-next
                preNode.next = next;
            }
        }
    
        public void printListNode(ListNode list){
            ListNode node = list;
            while(node!=null){
                System.out.println(node.val);
                node = node.next;
            }
        }
    
        public static void main(String[] args) {
            ListNode n1 = new ListNode(1);
            ListNode n2 = new ListNode(2);
            ListNode n3 = new ListNode(3);
            ListNode n4 = new ListNode(4);
            n1.setNext(n2);
            n2.setNext(n3);
            n3.setNext(n4);
            n4.setNext(null);
            Solution s = new Solution();
            s.printListNode(n1);
            s.deleteNode(n1, n3);
            s.printListNode(n1);
        }
    }
    

    Ok,测试结果

     1
    2
    3
    4
    找到待删除对象了。3
    1
    2
    4
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧