链表

链表通过指针将一组零散的内存空间串联起来使用。
单链表

链表.jpg

双向链表
双向链表.jpg

循环链表
循环链表.jpg

链表的特点

每一个内存块称之为节点
为了将所有节点联系起来 每个节点不仅要记录数据还要记录下一个内存块的地址
通常 第一个节点称之为头节点 最后一个节点称之为尾结点

链表的相关操作

data:节点元素
next:后继节点地址

下标访问:不支持
插入

q:插入的节点
p:当前节点
只需p->next = q就可以了 时间复杂度为O(1)

删除

k:删除节点
单纯的删除操作只需将k节点删除就可以了时间复杂度为O(1)
但删除元素后要将指向k的指针也删除 这就需要从头遍历了 时间复杂度为O(n)
这里有个小技巧 当k不为尾结点时

k->data = k->next->data;
k->next = k->next->next;

然后删除k->next 时间复杂度为 O(1)

查找

顺序遍历O(n)
将链表构建为跳表 查找的时间复杂度为O(n)

LeetCode234 回文链表
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean isPalindrome(ListNode head) {
        ListNode fast = head, slow = head;
        while (fast != null) {
            if (fast.next == null) {
                slow = slow.next;
                break;
            }
            slow = slow.next;
            fast = fast.next.next;
        }
        slow = reverse(slow);
        fast = head;
        while (slow != null) {
            if (slow.val != fast.val) {
                return false;
            }
            slow = slow.next;
            fast = fast.next;
        }
        return true;
    }

    private ListNode reverse(ListNode head) {
        if (head == null)
            return null;
        ListNode previous = null;
        ListNode next = null;

        while (head != null) {
            next = head.next;
            head.next = previous;
            previous = head;
            head = next;
        }

        return previous;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识...
    醒着的码者阅读 4,653评论 1 45
  • 链表是离散存储线性结构,物理地址上不要求连续。 链表优点物理地址不需要连续,插入删除元素比较快 链表缺点查询速度慢...
    阿狸404阅读 1,446评论 0 0
  •   终于开始提笔写算法(2)了,我先为自己鼓个小手,然后决定,这一波写个常见的数据结构,链表,还望各位小伙伴多多支...
    大王叫我来巡老和山阅读 1,235评论 2 5
  • LeetCode-链表 链表(Linked List)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺...
    raincoffee阅读 1,279评论 0 6
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,601评论 16 22