• Java链表操作代码


    /**
     * 
     */
    package com.cherish.SwordRefersToOffer;
    
    /**
     * @author acer
     *
     */
    public class test_22链表中倒数第k个节点 {
    
        /**
         * 
         */
        public test_22链表中倒数第k个节点() {
            // TODO 自动生成的构造函数存根
        }
        
        public static class ListNode{
            private    int val;
            ListNode next = null;
            ListNode(int val){
                this.val = val;
                next = null;
            }
        }
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            ListNode head = new ListNode(1);
            //给一个链表赋值
            for(int i = 2;i<10;i++) {
                insertNodeFromTail(head,new ListNode(i));
            }
            printListNode(head);
            System.out.println(FindKthToTail(head,4).val);
            System.out.println(listNodeLength(head));
            System.out.println(deleteFromIndex(head,4));
            printListNode(head);
            System.out.println(listNodeLength(head));
            System.out.println(FindKthToTail(head,4).val);
            
    
        }
        
        //找到倒数第k个节点
        public static ListNode FindKthToTail(ListNode head,int k) {
            if(head == null||k <= 0) {
                return null;
            }
            ListNode p1 = head;
            ListNode p2 = head;
            for(int i = 1;i<k;i++) {
                if(p1.next != null) {
                    p1 = p1.next;
                }else {
                    return null;
                }            
            }
            while(p1.next != null) {
                p1 = p1.next;
                p2 = p2.next;
            }
            return p2;
        }
        
        //从头部插入新节点
        public static void insertNodeFromHead(ListNode head,ListNode newNode)
        {
            newNode.next = head;
            head = newNode;
        }
        
        //从尾部插入新节点
        public static void insertNodeFromTail(ListNode head,ListNode newNode)
        {
            if(head == null) {
                head = newNode;
                return;
            }
            ListNode temp = head;//用temp代替head去遍历找到最后一个节点,一定不要用head自己去遍历,不然就找不到链表头了
            while(temp.next != null) { //下一节点不为空
                temp = temp.next;
            }
            temp.next = newNode;//找到最后一个节点后把新节点插入进去
        }
        
        //计算链表的长度
        public static int listNodeLength(ListNode head) {
            if(head ==null) {
                return 0;
            }
            ListNode temp = head;
            int length = 0;
            while(temp.next != null) {
                length++;
                temp = temp.next;            
            }
            return length;
        }
        
        //从特定位置删除链表
        public static boolean deleteFromIndex(ListNode head,int deleteIndex)
        {
            if(head == null || deleteIndex<1) {
                return false;
            }
            if(deleteIndex == 1) {
                head = head.next;
                return true;
            }
            int index = 1;
            ListNode temp = head;
            ListNode deleteNode;
            while(temp.next != null && index < deleteIndex) {
                index++;
                temp = temp.next;
            }
            deleteNode = temp.next;
            temp.next = deleteNode.next;
            return true;
        }
        
        //按顺序输出链表
        public static void printListNode(ListNode head)
        {
            ListNode temp = head;
            while(temp.next != null)
            {
                System.out.print(temp.val);
                System.out.print("	");
                temp = temp.next;
            }
            System.out.println();
        }
        
    
    }
  • 相关阅读:
    python面向对象中的一些特殊__方法__
    mysql数据库的优化和查询效率的优化
    详解python的垃圾回收机制
    基于django的自定义简单session功能
    使用python制作验证码
    Netty 系列之 Netty 高性能之道
    Java提高篇(二七)-----TreeMap
    Oracle、MySql、SQLServer 数据分页查询
    深入理解数据库原理系列(1)---日志系统原理
    34个数据库常见面试题讲解
  • 原文地址:https://www.cnblogs.com/CherishTheYouth/p/CherishTheYouth_2019_0808.html
Copyright © 2020-2023  润新知