由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 如何删除 linked list 的最后一个元素
相关主题
help: 两个Java的问题一个bug竟然是legacy code埋的地雷。
请教一个Queue实现的问题请教下LinkedHashMap是怎么实现的?是bucket linked还是record linked?
Java是如何处理ArrayList和LinkedList的内存的?Re: question:linked list?
Greasemonkey script for mitbbsPlease give me some ideas!! About the Object database invocation.
leetcode请教: time complexyplease help me to solve this question!
linkedlist 长度计算?请问怎么改变org.w3c.dom.Document一个node得值
Top Ten Errors Java Programmers Make(1)Is it possible to get Class object for T from a generic class? (下列空档,是否可填)
Java简直完全不可控啊!!!这种Unit test也有必要吗??
相关话题的讨论汇总
话题: node话题: null话题: person话题: java话题: object
进入Java版参与讨论
1 (共1页)
l***i
发帖数: 168
1
parameter 只有一个 Node,要被删除。
private static boolean removeNode(Node toRemoved)
{
if(toRemoved == null)
{
return false;
}
if(toRemoved.next == null) //This is not working.
{
toRemoved = null;
return true;
}
Node next = toRemoved.next;
toRemoved.data = next.data;
toRemoved.next = next.next;
return true;
}
我想这个node如果是最后一个元素的话,设其为 null
但是实际跑的时候,发现这个node并没有删除。请问为什么?有什么办法直接删除
linked list 的最后一个元素 ?
多谢。
B*****g
发帖数: 34098
2
removeLast()?

【在 l***i 的大作中提到】
: parameter 只有一个 Node,要被删除。
: private static boolean removeNode(Node toRemoved)
: {
: if(toRemoved == null)
: {
: return false;
: }
: if(toRemoved.next == null) //This is not working.
: {
: toRemoved = null;

g*****g
发帖数: 34805
3
来问作业?
if(current.next.next == null) {
current.next = null;
} else {
current = current.next;
}
加上检查小于等于1个结点的特殊情况就可以了。

【在 l***i 的大作中提到】
: parameter 只有一个 Node,要被删除。
: private static boolean removeNode(Node toRemoved)
: {
: if(toRemoved == null)
: {
: return false;
: }
: if(toRemoved.next == null) //This is not working.
: {
: toRemoved = null;

c*********e
发帖数: 16335
4
这么麻烦? 和c++一样了。

【在 g*****g 的大作中提到】
: 来问作业?
: if(current.next.next == null) {
: current.next = null;
: } else {
: current = current.next;
: }
: 加上检查小于等于1个结点的特殊情况就可以了。

J*******n
发帖数: 2901
5
toRemove.next==null的情况应该直接return false,因为你只给toRemove这个节点,
而节点又只有指向next的reference,没有previous,那如果toRemove是最后一个节点
,完全无解啊

【在 l***i 的大作中提到】
: parameter 只有一个 Node,要被删除。
: private static boolean removeNode(Node toRemoved)
: {
: if(toRemoved == null)
: {
: return false;
: }
: if(toRemoved.next == null) //This is not working.
: {
: toRemoved = null;

c*********e
发帖数: 16335
6
while (current.next.next != null) {
current = current.next;
}
current.next = null;

【在 g*****g 的大作中提到】
: 来问作业?
: if(current.next.next == null) {
: current.next = null;
: } else {
: current = current.next;
: }
: 加上检查小于等于1个结点的特殊情况就可以了。

l***i
发帖数: 168
7
题目的要求是从一个linkedlist里把某个node删除。
我看不出你的code如何把这个node删除了,你只是把当前的pointer移到了下一个node。

【在 g*****g 的大作中提到】
: 来问作业?
: if(current.next.next == null) {
: current.next = null;
: } else {
: current = current.next;
: }
: 加上检查小于等于1个结点的特殊情况就可以了。

l***i
发帖数: 168
8
请注意,这个问题要求parameter只有一个,就是当前的node的pointer,没有整个list
的信息。而且这个要求自己implement,不能用java现有的library。
我的问题是,既然倒数第二个的next指向最后一个,那我把最后一个设为null,不就相
当与删除了这个node吗?是不是有什么java底层的东西我搞错了?

【在 B*****g 的大作中提到】
: removeLast()?
c*********e
发帖数: 16335
9
有娃大妈真是认真啊。学过数据结构吗?
你打算怎么把最后一个设为null呢?

list

【在 l***i 的大作中提到】
: 请注意,这个问题要求parameter只有一个,就是当前的node的pointer,没有整个list
: 的信息。而且这个要求自己implement,不能用java现有的library。
: 我的问题是,既然倒数第二个的next指向最后一个,那我把最后一个设为null,不就相
: 当与删除了这个node吗?是不是有什么java底层的东西我搞错了?

J*******n
发帖数: 2901
10
toRemove只是一个reference,相当于一个指针,而指向这个要删的Node object的还有
其他指针(比如前一个节点的next),你把toRemove=null以后toRemove这个指针是不
指向你要删除的节点了,但是别忘了该节点的前一个节点的next reference还是指向该
节点的。这跟Java没关系。这样当从LinkedList的第一个node遍历的时候,还是可以走
到要删的节点,说的有点绕,希望意思表达明白了。。。

list

【在 l***i 的大作中提到】
: 请注意,这个问题要求parameter只有一个,就是当前的node的pointer,没有整个list
: 的信息。而且这个要求自己implement,不能用java现有的library。
: 我的问题是,既然倒数第二个的next指向最后一个,那我把最后一个设为null,不就相
: 当与删除了这个node吗?是不是有什么java底层的东西我搞错了?

相关主题
linkedlist 长度计算?一个bug竟然是legacy code埋的地雷。
Top Ten Errors Java Programmers Make(1)请教下LinkedHashMap是怎么实现的?是bucket linked还是record linked?
Java简直完全不可控啊!!!Re: question:linked list?
进入Java版参与讨论
J*******n
发帖数: 2901
11
貌似知道你为啥进入死胡同了。。。从linkedlist里删掉一个node的意思就是这个node
前一个node的next pointer不指向它,这个node后一个node的previous pointer也不指
向它,就表示删掉了,因为这个node就跟linkedlist没关系了。不是说把这个node
object清掉才叫删掉。。。

node。

【在 l***i 的大作中提到】
: 题目的要求是从一个linkedlist里把某个node删除。
: 我看不出你的code如何把这个node删除了,你只是把当前的pointer移到了下一个node。

c*********e
发帖数: 16335
12
如果node是new造出来的,最好能delete 掉,释放空间。当然,如果是java,就不用管
了。

node

【在 J*******n 的大作中提到】
: 貌似知道你为啥进入死胡同了。。。从linkedlist里删掉一个node的意思就是这个node
: 前一个node的next pointer不指向它,这个node后一个node的previous pointer也不指
: 向它,就表示删掉了,因为这个node就跟linkedlist没关系了。不是说把这个node
: object清掉才叫删掉。。。
:
: node。

a**e
发帖数: 5794
13

得先判断 current.next 是否 null

【在 c*********e 的大作中提到】
: 如果node是new造出来的,最好能delete 掉,释放空间。当然,如果是java,就不用管
: 了。
:
: node

c*********e
发帖数: 16335
14
linked list最后一个node才指向null,循环里面,current最远只指向倒数第二个node

【在 a**e 的大作中提到】
:
: 得先判断 current.next 是否 null

c*********e
发帖数: 16335
15
恩,这个属于特例,只有一个node,要在loop前先特别对待。

【在 a**e 的大作中提到】
:
: 得先判断 current.next 是否 null

l***i
发帖数: 168
16
呵呵,你解释得很明白。谢谢。
在C++里可以用pointer的reference直接改变一个memory location的值,比如下面这个
#include
using namespace std;
void update(int*);
int main()
{
int x = 5;
int* pi = &x;
cout << "Before update, " << x << endl;

update(pi);
cout << "After update, " << x << endl;
return 0;
}
void update(int* t)
{
*t = 8;
}
输出是
Before update, 5
After update, 8
是不是可以说,在java里 没有相应的功能?

node

【在 J*******n 的大作中提到】
: 貌似知道你为啥进入死胡同了。。。从linkedlist里删掉一个node的意思就是这个node
: 前一个node的next pointer不指向它,这个node后一个node的previous pointer也不指
: 向它,就表示删掉了,因为这个node就跟linkedlist没关系了。不是说把这个node
: object清掉才叫删掉。。。
:
: node。

c*********e
发帖数: 16335
17
java里面这个方面比较tricky。

这个

【在 l***i 的大作中提到】
: 呵呵,你解释得很明白。谢谢。
: 在C++里可以用pointer的reference直接改变一个memory location的值,比如下面这个
: #include
: using namespace std;
: void update(int*);
: int main()
: {
: int x = 5;
: int* pi = &x;
: cout << "Before update, " << x << endl;

J*******n
发帖数: 2901
18
In Java, primitives are passed by value, objects are passed by reference.
in Java, if you have
int x = 5;
int y = x;
then you update y, x won't be updated, because int is primitive, so y has
its own value instead of an pointer to value of x.
if you have
Object x = new Object();
Object y = x;
then you update y, the object that x points to will be updated as well,
because reference x is passed to reference y.

这个

【在 l***i 的大作中提到】
: 呵呵,你解释得很明白。谢谢。
: 在C++里可以用pointer的reference直接改变一个memory location的值,比如下面这个
: #include
: using namespace std;
: void update(int*);
: int main()
: {
: int x = 5;
: int* pi = &x;
: cout << "Before update, " << x << endl;

c*********e
发帖数: 16335
19
in java,it's all passed by value. e.g.
main() {
Person p= new Person("Jack");
foo(p);
system.out.println(p);
//you need to write an override tostring() in Person class
}
================
public void foo(Person s) {
s=new Person("Tom");
}

【在 J*******n 的大作中提到】
: In Java, primitives are passed by value, objects are passed by reference.
: in Java, if you have
: int x = 5;
: int y = x;
: then you update y, x won't be updated, because int is primitive, so y has
: its own value instead of an pointer to value of x.
: if you have
: Object x = new Object();
: Object y = x;
: then you update y, the object that x points to will be updated as well,

1 (共1页)
进入Java版参与讨论
相关主题
这种Unit test也有必要吗??leetcode请教: time complexy
How to find function pointers in Java?linkedlist 长度计算?
看了下storm,大概明白了怎么做real time系统了Top Ten Errors Java Programmers Make(1)
what's inside an java object?Java简直完全不可控啊!!!
help: 两个Java的问题一个bug竟然是legacy code埋的地雷。
请教一个Queue实现的问题请教下LinkedHashMap是怎么实现的?是bucket linked还是record linked?
Java是如何处理ArrayList和LinkedList的内存的?Re: question:linked list?
Greasemonkey script for mitbbsPlease give me some ideas!! About the Object database invocation.
相关话题的讨论汇总
话题: node话题: null话题: person话题: java话题: object