链表10:访问单个节点的删除

来源:互联网 发布:efd软件下载 编辑:程序博客网 时间:2024/05/20 18:45

题目:实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。

给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true。

思路:即给定一个要删除的结点pNode,由于是单向链表,因此只能向下遍历而不能向上遍历,因此只能采取的方法是:对于要删除的结点的后面的结点的值向前进行拷贝传递,即将pNode后面的值赋值给pNode,然后将pNode.next指向pNode.next.next;不需要对后续结点全部向前移动,只要改变这个结点下一个结点的指向即刻。特殊的,如果要删除的结点是尾结点,即pNode.next==null,那么如果直接将pNode③赋值为null,那么其实本质上并不会导致结点③被删除,要将结点③删除必须是的结点②的next指针指向null,而不是直接改变结点③为null。因此对于要删除的结点为尾结点的特殊情况,程序不要求处理,直接返回FALSE即可。

public class Remove {    public boolean removeNode(ListNode pNode) {        if(pNode==null||pNode.next==null)        {//不要写pNode==null;            return false;        }      pNode.val=pNode.next.val;        pNode=pNode.next;        return true;    }}


0 0
原创粉丝点击