链表
数组是一段连续的
单链表,双链表(next和privious
注意:长度为1和零的空链表,头尾节点和空节点要额外考虑
单链表在删除的时候,直接把要删除节点的前一个节点的next指针指向删除节点的后一个元素、
单链表在插入的时候,插入位置的前一个节点的next指针指向这个节点,这个院元素的next指针也要指向后一个节点
链表的最优解往往是不使用数据结构的方法、
题目:在一个环形有序链表中插入一个数,使依然有序:首先生成节点值为node的新节点。考虑这是不是空链表,若是,让node的next指针指向自己,返回node。定义privious分别指向头结点,privious指向尾节点,若这个数在c和p之间,插入。返回head。若这个数不在c和p之间,就插在头结点的前面。若node值大于所有的值,返回原来头结点,小于所有值返回node。
题目 给定链表的头结点head,把链表中所有小于num的值放在左边,大于num的放在中间。用类似快排的方法,数组中排好序,分成三个小链表,再连接起来、
题目:给定一个单链表,怎么删除指定节点,(没有给出头结点)
题目 给定链表,,去掉为值为某个固定值的节点。??逆序之后的头结点和上一组已经调整好的尾节点相连
题目 判断是否是回文 。方法一,利用压入再弹出,一个个比较 方法二,快指针一次走一步,慢指针一次走两步。满指针走的时候把每个值压入栈中,当慢的指针走到一半时,开始弹出栈中的值并对比。方法三,把后半部分逆序,然后进行对比、
链表中的每个元素都有一个next指针和random指针,怎么复制?
空间复杂度为1,时间复杂度为n的情况下求一个链表中有没有回环。普通方法用哈希表(不符合要求),就是分别记录每个元素的位置,若某的元素的位置出现了两次,返回两次时的节点。正确方法应该用一个快指针走两步,一个满指针走一步。当慢指针在路上,快指针走到头的时候(遇到null),说明是直链表。快慢指针相遇的时候此时把快指针放到开头以一步的速率走,慢指针从相遇的地方开始走,指针相遇时就是头结点的位置
两个单链表是否相交?遍历两个链表,分别计算出他们的长度,让长的那个链表先走完length1-length2,然后两个链表一起往下走,如果遇到,说明相交。
两个环形单列表是否相交?分别找到两个环形单链表的入环节点,如果两个节点相同,说明相交。再来看两个链表