链表练习-1删除单向链表的尾结点Java

链表是一种递归的数据结构,或者为空(null),或者含有泛型元素的结点和指向另一条链表的引用

    class Node{
        Item item;
        Node next;
    }

已知一个链表的首结点first,删除链表的尾结点

思路如下(这尼玛字儿也太丑了,凑合看吧)

void deleteLast(){

       //第一步,将令current与first指向同一个链表
		Node current = first;

		//若链表为空则不做任何操作
		if(current==null) {return;}

        //若链表不为空则令next为current的下一个结点
		Node next = current.next;
        //如果链表中仅有一个元素,令first为null
		if(next == null) {first = null;}

		else {
            //循环操作直至next.next为空
			while(next.next!=null) {
				current = next;
				next = current.next;
			}
            //当next.next为null时,令current.next为null
			current.next = null;
		}
	}

链表9、8、7、6...0; 测试结果如下

失败代码对比(左图为失败品,并没有删除尾结点)

将右图中的最后一行代码current.next = null 改为 next = null同样会失败。

左图运行Debug过程如下,first的尾结点id与current的id相同, 说明current确实是指向了first的尾结点。但是当运行最后一步,令current = null,而first的尾结点并没有改变。

因为令current=null,只是将current重新指向了另一个空对象null;并不能改变其原指向的first尾结点。也就是说只是将current重定向了而已,并没有改变原有对象。

经验分享 程序员 微信小程序 职场和发展