链表

1、单链表

双链表

2、单链表插入和删除

插入:找到插入节点前一个节点和后一个节点,前一个节点next指针指向新插入的节点,新插入节点的next指针指向下一个节点

s->next=p->next;

p->next=s

删除:找到删除节点前一个节点和后一个节点,把前一个节点的指针指向后一个节点

p->next=p->next->next

3、链表的翻转操作

next = head.next; //1

head.next = pre; //2

pre = head; //3

head = next; //4

第一步:next = head.next 
将 head.next 赋值给 next 变量,也就是说 next 指向了节点2,先将节点2 保存起来。

第二步:head.next = pre 
将 pre 变量赋值给 head.next,即 节点1 指向了 null

第三步:pre = head

将 head 赋值给了 pre,即 pre 指向节点1,将节点1 设为“上一个节点”

第四步:head = next

将 next 赋值给 head,即 head 指向了节点2。将节点2 设为“头节点”

总结
保存当前头节点的下一个节点(当前头节点为1,先将节点2保存起来)

将当前头节点的下一个节点指向 “上一个节点”(当前头节点1 指向了 (“上一个节点”)null),这一步才是实现反转

将当前头节点设置 “上一个节点”(将节点1设为“上一个节点”)

将保存的下一个节点设置 “头节点”(将节点2 设为“头节点”)
https://blog.csdn.net/xyh269/article/details/70238501

4、给定一个整数num,如何在节点值有序的环形链表中插入一个节点值为num的节点,并且保证这个环形单链表依然有序

思路:

链表为空

链表不为空:

p:头结点

c:当前节点

同时移动p和c,如果p.val<=node.val并且c.val>=node.val,则将node插入到p和c之间。

如果p和c转一圈都没有发现应该插入的位置,则插入到头结点前面

5、给定一个链表的头结点head,再给定一个num,小于num都放在左边,等于放中间,大于放num

思路一:荷兰国旗

思路二:分成三个小链表

6、给定两个有序链表,头结点分别为head1和head2,打印两个链表的公共部分

思路:

判断是否有空,false

从两个链表头结点遍历,如果list1当前节点值小于list2当前节点值,则遍历list1;如果list1当前节点值大于list2当前节点值,则遍历list2;如果list1当前节点值等于list2当前节点值,打印当前节点值,然后都向下移动,有一个链表为空,结束

7、给定一个单链表的头结点head,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点

思路1:栈实现,存K个元素

思路2:不需要栈结构,在链表中直接调整,用变量记录每一组开始的第一个节点和最后一个节点

8、判断一个链表是否为回文结构

思路一:把链表压入栈中,遍历链表,同时弹出栈中元素,看是否相等

思路二:快慢指针,快指针一次两步,慢指针一次一步,慢指针遍历过元素压入栈中,快指针遍历完时,慢指针刚好到达链表中间,链表长度偶数,中间节点压入栈,奇数,不压入;慢指针继续遍历链表,栈中元素同步弹出,判断是否相等。

思路三:找中间元素,后部分逆序,前后相比较

9、如何判断一个单链表是否有环?有环的话返回进入环的第一个节点,无环返回空

思路一:哈希表

思路二:快慢指针,快指针一次两步,慢指针一次一步,有环时,快慢指针会相遇;相遇时,快指针从头一次走一步,慢指针从当前位置一次一步,再次相遇,则为环。

10、如何判断两个无环单链表是否相交?

思路一:哈希表

思路二:

统计两个链表长度,长的链表先走长度差

之后,两个链表同时走,两个链表节点值相同时,则相交,若走到尾都不相交,则不相交

11、如何判断两个有环单链表是否相交?

分别找到两个环形链表的入环节点,若相同,则相交,找第一个入环节点,思路同无环单链表相交,只不过终止条件是上一步找到的入环节点;

若不相同,分两种情况,

第一种情况:从找到的入环节点开始,遍历链表,回到入环节点,返回空

第二种情况:从找到的入环节点开始,遍历链表,回到入环节点前遇到链表2入环节点,返回链表1入环节点或链表2入环节点

12、给定两个链表的头结点head1和head2,如何判断两个链表是否相交?相交的话返回第一个相交节点

(1)找到两个链表的各自入环节点

(2)如果node1和node2,一个为空,一个非空,两个链表不可能相交

(3)如果都为空,说明无环,如何判断两个无环单链表是否相交?

(4)如果都不为空,如何判断两个有环单链表是否相交?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值