《算法(第四版)》 习题:1.3.19

来源:互联网 发布:js 离开页面时提示 编辑:程序博客网 时间:2024/05/29 10:23

1、问题描述

给出一段代码,删除链表的尾结点,其中链表的首结点为first。

2、算法思路

为删除尾结点,需要找到倒数第二个结点。尾节点的标志为last.next==null是否成立,找到尾节点后需将倒数第二个节点SecondLast.next=null即可删除尾节点。

3、编程实现(Java实现)

public class Solution_19 {

    
    public static void main(String[] args){
        String[] strs = {"You","are","a", "good" , "boy"};
        Node first = creatList(strs); //建立一个链表        
        System.out.println("删除最后一个节点之前链表为:");
        printList(first);  //打印原始链表
        delLastNode(first);  //删除最后一个节点
        System.out.println("删除最后一个节点之后链表为:");
        printList(first);        //打印删除节点后链表
    }
    /*
     * 节点内部类
     */
    private class Node{
        String item;
        Node next;
    }
    /**
     * 建立以字符数组值的链表,数组至少需要一个元素
     * @param strs
     * @return firstNode
     */
    public static Node creatList(String[] strs){    
        /*
         * 建立头结点
         */
        Solution_19 solution = new Solution_19();
        Node newnode = solution.new Node();
        newnode.item = strs[0];
        Node first = newnode;
        
        /*
         * 建立后续节点
         */
        Node current = first;    
        for(int i=1;i<strs.length;i++){
            newnode = solution.new Node();
            newnode.item = strs[i];
            current.next = newnode;
            current = newnode;
        }    
        current.next=null;//尾节点指针指向null
        return first;
    }
    /**
     * 删除最后一个节点
     * @param first
     */
    public static void delLastNode(Node first){
        if(first.next==null) first = null;  //如果只有一个节点,则最后一个节点就是本身
        else{        //如果有两个或两个以上节点,就需要查找最后一个节点,以及记录倒数第二个节点
            Node current = first;
            Node SecondLast = first;
            while(current.next!=null){    
                SecondLast = current;
                current = current.next;
            }
            SecondLast.next = null;//删除链表的尾节点,即把倒数第二个节点的指针指向Null即可
        }
    }        
    /**
     * 打印首节点first的链表
     * @param first
     */
    private static void printList(Node first){
        System.out.println(first.item);//打印头节点
        Node current = first;
        while(current.next!=null){            
            current = current.next;
            System.out.println(current.item);
        }
    }
    

}

4、测试结果



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 四年级的孩子上课喜欢讲小话怎么办 五年级孩子太叛逆怎么办 二年级话唠孩子怎么办 家有老人带孩子怎么办 不会看孩子。孩子一哭就害怕怎么办 孩子不老实爱动怎么办 4周孩子脾气大怎么办 老公脾气暴躁爱骂人怎么办? 当妈妈了脾气不好怎么办 父亲很坏不顾家很会赌钱怎么办 妈妈骂我很难听怎么办 父母管的太严怎么办 2岁宝宝哭闹不止怎么办 8岁儿童叛逆期怎么办 两岁宝宝叛逆期怎么办 4个月小孩哭怎么办 2个月孩子爱哭怎么办 小孩挑衅大人被大人打怎么办 在学校犯了错怎么办 孩子在学校爱捣乱怎么办 小孩老是在学校捣乱怎么办 孩子不听话每天会发火怎么办 孩子不听话控制不住发火怎么办 儿子不听话我总会发火怎么办 小孩好动精力不集中怎么办 孩子好动精力不集中怎么办 一岁半宝宝咳嗽半个月了怎么办 6岁儿童上课调皮怎么办 小孩挨揍后精神失控怎么办 孩子不听话把我胃气疼了怎么办 因为孩子不听话夫妻经常吵架怎么办 11岁儿子不听话了怎么办 二十岁的儿子还不听话怎么办 幼儿园小班幼儿不听老师的话怎么办 幼师对待不听话的孩子该怎么办 2岁宝宝不吃饭只喝奶怎么办 孩子哭着喊妈妈不睡觉怎么办 孩子晚上不睡觉一直哭怎么办 孩子不睡觉还哭怎么办 孩子晚上不睡觉老哭怎么办? 4岁宝宝叛逆期怎么办