1.3.19~1.3.30

链表综合

package luyunzhou.one;

import java.util.Scanner;
/**
 * 1.3.19~1.3.30无29
 *
 */
public class Answer1319 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
//      Node<String> node = new Node<String>();
//      for (int i = 0; i < 5; i++) {
//          node.add(scanner.nextLine());
//      }
        Node<Integer> node = new Node<Integer>();
        for (int i = 0; i < 3; i++) {
            node.add(scanner.nextInt());
        }

//==========================================================
//      node.deletelast();
//      node.print();

//==========================================================
//      node.delete(scanner.nextInt());
//      node.print();

//==========================================================
//      System.out.println(node.find(scanner.nextLine(), node));

//==========================================================
//      node.removeafter(node.first);
//      node.print();

//==========================================================
//      Node<String> node1 = new Node<String>();
//      for (int i = 0; i < 5; i++) {
//          node1.add(scanner.nextLine());
//      }
//      Node<String> node2 = new Node<String>();
//      for (int i = 0; i < 5; i++) {
//          node2.add(scanner.nextLine());
//      }
//      node.insertAfter(node1, node2);
//      node1.print();

//==========================================================
//      node.remove(node, "q");
//      node.print();

//==========================================================
//      System.out.println(node.max(node.first));
//      System.out.println(node.remax(node.first));

//==========================================================
//      System.out.println(node.reverse(node.first));
//      node.print();
    }


}
class Node<Item>{
    public Node first;
    public Item item;
    public Node next;
    public void add(Item item) {
        if(first == null){
            first = new Node();
            first.item = item;
        }else {
            Node node = first;
            while(node.next != null){
                node = node.next;
            }
            Node a = new Node();
            a.item = item;
            node.next = a;
        }

    }
    public void deletelast() {
        Node node = first;
        while(node.next.next != null){
            node = node.next;
        }
        node.next = null;
    }
    /**
     * Node<String> p = node.first;
        p = p.next;
        p = null;
        p = node.first;
        System.out.println(p.next.item);
        只是断开了自身的链接,前一个节点还是可以访问的。
     * 只是把head后面的节点断开连接,所有的节点都是存在的
     * 你没有free释放这些节点的内存,那么这些节点还是有的,数据还是存在,只是和head这个节点断开了连接,找不到后面的节点而已
     * 你没有释放head这个节点,data当然存在了,即使你head=NULL,data也会存在,只是断开了和head的关系而已
     */
    public void delete(int k) {
        System.out.println("用到了");
        if(k == 1)
            first = first.next;
        else 
        if(k > 1){
            Node node = first;
            for (int i = 0; i < k-2; i++) {
                node = node.next;
            }//k-1节点
            node.next = node.next.next;
        }
    }
    /**
     * 删除第一个节点需分开讨论。
     */

    public boolean find(String key,Node node) {
        node = first;
        while(node != null){
            if(node.item.equals(key) ){
                return true;
            }
            node = node.next;
        }
        return false;
    }
    /**
     * 字符串相等用equal()
     */

    public void removeafter(Node node) {
        if(node != null||node.next != null)
        node.next = null;
    }

    public void insertAfter(Node node1,Node node2) {
        Node node = node1.first;
        while(node.next != null){
            node = node.next;
        }
        node.next = node2.first;
    }

    public void remove(Node node,String key) {
        Node p = node.first;
        while(p.next != null){
            while(p == node.first){//头结点的值为key
                if(p.item.equals(key)){
                    p = p.next;
                    node.first = node.first.next;
                    if(p == null || p.next == null&&(!p.item.equals(key))){
                        return;
                    }
                    /**
                     * if的作用
                     * 1.最后一个p.item也为key,删完直接返回,不然自身if就要null和key比较。
                     * 2.只有最后一个节点值不为key,直接返回,防止在下面while括号内null与key比较
                     */
                }else{
                    break;
                }
            }
            while(p.next.item.equals(key)){//非头结点的值为key
                p.next = p.next.next;
                if(p.next == null){
                    return;
                }
                /**
                 * if的作用
                 * 防止若最后一个p.item也是key,则while中会p.next.item=null与key比较。
                 */
            }
            p = p.next;
        }
    }

    public int max(Node<Integer> first) {
        Node<Integer> node = first;
        if(node == null){
            return 0;
        }else{
            int m = node.item.intValue();
            while(node != null){
                if(node.item.intValue() > m){
                    m = node.item.intValue();
                }
                node = node.next;
            }
            return m;
        }
    }

    public int remax(Node<Integer> first) {//递归max
        if(first == null){
            return 0;
        }else {
            int m = first.item.intValue();
            if(first.next == null){
                return m;
            }else{
                if(remax(first.next) > m){
                    return remax(first.next);
                }else {
                    return m;
                }
            }
        }
    }

    public  Item reverse(Node first) {
        Node p = first;
        Node q = first.next;
        if(q != null){
            Node r = q.next;
            p.next = null;
            do{
                q.next = p;
                p = q;
                q = r;
                if(r != null)
                r = r.next;
            }while(q != null);
        }
        this.first = p;
        return (Item) p.item;
    }

    public void print() {
        Node node = first;
        if(node == null){
            System.out.println("该链表为空链表");
        }
        while(node != null){
            System.out.print(node.item+" ");
            node = node.next;
        }
        System.out.println();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值