学习数据结构的第五天(三)

class Solution {
public ListNode removeElements(ListNode head, int val) {
//如果没有前置头,那么需要分是头还是链身
//给它加一个前置头哈哈
ListNode dummyHead=new ListNode(-1);
//删除的话,那么需要找到下一个,也就是说找到这个节点的上一个节点。
dummyHead.next=head;
ListNode node=dummyHead;
while(node!=null)
{
if(node.next!=null)
{
if(node.next.val==val)
{
node.next=node.next.next;
// node.next.next=null; 这句话也应该学到很多的。
continue;
}
}
node=node.next;
}
return dummyHead.next;
}
}

T203 删除链表中的元素:

key1:无论怎么说,添加一个dummyhead头结点是不错的选择

key2:对于删除来说,一定是到达需要删除节点的上一个节点。那么比较的就是  当前节点的下一个节点,用下一个节点进行比较

如果说是删除了相应的节点,那么指针应该留在原地不动,因为下一个节点变成新的了,再去比较。

如果没删除节点,那么应该移动。

这些没什么可说的了。

key3:if(node.next.val==val)
{
node.next=node.next.next;
// node.next.next=null; 这句话也应该学到很多的。

对于下面这句话,到底错在哪了。

对于链表的删除:1.先保存长串的节点   2.用第三方删除法,不能在原地删除。     原因:因为原地删除的话,那么再删除的就影响到本身了。你细品这句话就懂了。

删除:必须先存长串的节点,然后必须引入第三方来删除。

改代码:

Node n1=node.next;
node.next=n1.next;
n1.next=null;

 确实好像减小了内存的消耗

猜你喜欢

转载自www.cnblogs.com/startFrom0/p/12609016.html
今日推荐