线性表

基本概念

线性表是一种逻辑结构,相同数据类型的N个数据元素组成的有序序列
线性表有以下几个特征:
1、数据元素有限
2、逻辑上元素有先后次序
3、数据类型相同
4、仅讨论元素之间的逻辑关系

线性表的分类
1、顺序存储 顺序表—>比如数组
2、链式存储

在这里插入图片描述

数组和链表比较

数组
在内存空间必须连续的
查询访问性很强,查找速度快
插入删除效率低。可能浪费内存,内存空间要求高,必须连续的,大小固定,不能动态拓展

链表
在内存中不是连续的
插入删除速度快,内存利用率高,不会浪费内存、大小没有固定,拓展性强
不能随机查找,必须从第一个节点开始遍历,效率低

单链表、双链表、循环链表

单链表 只有后驱没有前驱
双链表有前驱也有后驱
循环链表,头节点上一个节点是尾节点

基本操作

头结点插入
尾结点插入
中间插入
删除

实战

单链表反转

/**
     * 单链表反转
     * @param head
     */
    public static ListNode reverseList(ListNode head)
    {
        ListNode pre = null; //当前节点的上一个节点
        ListNode next = null;//当前节点的下一个节点
        while(head!=null)
        {
            next = head.getNext();
            head.setNext(pre);
            pre = head;
            head = next;

        }
        return pre;
    }

单链表取中间值

public static ListNode getMid(ListNode head)
    {
        if(head ==null)
        {
            return head;
        }
        ListNode fast = head;
        ListNode slow = head;
        while(fast.getNext() !=null && fast.getNext().getNext()!=null)
        {
            slow = slow.getNext();
            fast = fast.getNext().getNext();
        }

        return slow;
    }

合并两个有序列表

奇数位升序,偶数位降序链表排序

单链表归并排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值