持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
基本介绍
常见链表结构分为单链表和双链表,区别就是有没有一个last变量指向上一个Node,双链表还支持从左到右和从右到左双向遍历:
反转单/双向链表
题目:分别实现反转单向链表和反转双向链表的函数
要求:如果链表长度为N,时间复杂度要求为O(N),额外空间复杂度要求为O(1)
这是非常基础的数据结构问题,不涉及算法。完全就是coding问题
简单说下思路,就是用两个指针,一个current当前node,一个last指向前一个node,当前node跳下一个让下一个节点的next指向last,然后last移动到current位置....记得最开始和最后处理head和null的指向
这里补充一下链表操作的返回值,如果链表涉及到换头的操作就需要带返回值,否则不需要,定义为void类型,例如上面的问题肯定是需要换头的:
那你定义的函数就应该以原先head为入参,需要返回一个Node(3节点)作为新的head,因为该函数会换头,刷题涉及到相关题目外层注意这个设计方法
打印两个有序链表的公共部分
题目:给定两个有序链表的头指针head1和head2,打印两个链表的公共部分
要求:如果两个链表的长度之和为N,时间复杂度为O(N)
有点类似外排的过程,有点merge的感觉。
两个指针指向两个链表,谁当前value小谁移动,相等就打印并且共同移动....有任何一个越界就停。