删除链表节点(java)

问题描述

删除链表节点(java)
 //deleteNode() O(1)= ((n-1)*O(1) + O(n)/2)
    static void deleteNode(Nodes head,Nodes x){
        if(head == null || x == null)
            return ;
        //不是尾节点
        if(x.next!=null){
            Nodes temp = x.next;
            x.next = temp.next;
            x.data = temp.data;
        }
        //只有一个节点,头结点(尾节点)
        else if(head == x){
            head = null;
        }else {
            //**尾节点:此处是删除尾节点的,不去遍历找待删除节点的前驱了,直接让应用null,让jvm垃圾回收器去回收节点,这样可以不????**
            x = null;
        }
    }
}

解决方案

没问题,因为java不是通过引用计数的方式而是从根对象遍历的方式进行垃圾回收的,只要你设置null了,那些节点都成死对象了,不管它们相互之间怎么引用,都会被回收的。

解决方案二:

如果你是通过new分配的空间,就记得delete一下,然后置为null,c++没有垃圾回收

时间: 2024-09-19 08:19:51

删除链表节点(java)的相关文章

单链表-删除链表的节点出现问题

问题描述 删除链表的节点出现问题 我创建了一个链表,链表的第一个节点不是空白的.我想用free函数删除第一个节点,发现出错.删除其他的节点没有问题.不知道什么缘故. 解决方案 你的链表怎么定义的? 是 typeof struct Node { Node next; } Node * head这样定义的么? 那么你删除首节点要这么做 prehead = head; head = head->next; free(prehead); 解决方案二: 删除节点时: Node *s,*p; s=p->n

链表相关问题。。1是删除,当删除头节点的时候,会出现死循环 2插入代码写好,但是没有实现插入的功能

问题描述 链表相关问题..1是删除,当删除头节点的时候,会出现死循环 2插入代码写好,但是没有实现插入的功能 int main(){ int i = 0; int place = 0; int nodeData; char c; struct Link *head = NULL;//指向链表头 printf(""Do you want to append a new node(Y/N)""); scanf("" %c""&am

链表的删除操作,删除头节点就会出问题 大家看看问题出在哪里呢

问题描述 链表的删除操作,删除头节点就会出问题 大家看看问题出在哪里呢 struct Link *DeleteNode(struct Link *head,int nodeData)//链表的删除 { struct Link *p = head,*pr = head; if (head == NULL)//首先需要判断链表是否为空!若空!无需执行删除操作! { printf("No Linked Table!n"); return(head); } while(nodeData !=

python实现:删除链表中等于给定值val的所有节点.求代码学习

问题描述 python实现:删除链表中等于给定值val的所有节点.求代码学习 例如:给出链表 1->2->3->3->4->5->3, 和 val = 3, 需要返回删除3之后的链表:1->2->4->5. 解决方案 python怎么考虑链表,是用类来实现链表节点吗? 如果不是,就简单了. def remove(arr): #arr=[1,2,3,3,4,5,3] arr_len = len(arr) for i in range(0,arr_len)

[华为机试练习题]24.删除链表中的重复节点、剩余节点逆序输出

题目 描述: 题目描述: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排. 要求实现函数: void vChanProcess(strNode * pstrIn,strNode * pstrOut); [输入] pstrIn:输入一个不带头节点的单向链表 [输出] pstrOut:删除内容重复的节点(重复的节点全部删除),剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请). [注意]只需要完成该函数功能算法,中

java 生成XML文件后,能不能去掉其中的根节点,但是不能删除根节点中的子节点内容

问题描述 java 生成XML文件后,能不能去掉其中的根节点,但是不能删除根节点中的子节点内容 比如 这个,生成的XML文件格式内容为: <?xml version=""1.0"" encoding=""UTF-8""?> <!--查询行号--> <!--机构码--> <!--公共交易机构名称--> <!--交易来源--> <!--交易名称--> <

删除链表的节点,然后再查询,编号会错误

问题描述 删除链表的节点,然后再查询,编号会错误 #include #include #include #include using namespace std; typedef int datatype; typedef struct person { datatype score; char name[20]; int number; struct person *llink, *rlink; }PE; void display(PE *head) { PE *p; cout << end

[经典面试题]在O(1)时间删除链表结点

[题目] 给定链表的头指针和一个结点指针,在O(1)时间删除该结点.链表结点的定义如下: struct ListNode {     int        value;     struct ListNode*  next; }; 函数的声明如下: void DeleteNode(ListNode* head,ListNode* node); [思路] 这是一道广为流传的Google面试题,能有效考察我们的编程基本功,还能考察我们的反应速度,更重要的是,还能考察我们对时间复杂度的理解. 在链表中

链表-求助Java算法,这两个算法问题有Java代码实现

问题描述 求助Java算法,这两个算法问题有Java代码实现 从N个元素集合里面随机抽取M个元素(M<N). C/C++: void randomChoose(int*data, intn, int *result, int m); Java: void randomChoose(int data[], int result[]); 说明: 1.Data是待抽取的元素集合,n是data的长度,result是抽取的结果,m是结果集的长度. 2.同一个元素不能被反复抽取. 3.每个元素被抽取到的概率