今天过了 10 道链表类型的题目,难度大多数是 easy 和少量 medium,在此总结以下,具体题目如下:
这类题目涉及的操作就是链表的翻转,遍历,删除,交换操作。以下是两点总结:
1、容易出错的就是链表的头边界问题
安全期间,程序可以直接下面开头:
if head is None or head.next is None:
#do something
或者,增加一个哨兵 newHead = ListNode(),newHead.next = head,然后旧的 head 就可以当作一个普通的节点对待,这样代码就可以统一。
2、双指针的技巧
如果说了空间复杂度为 O(1) 的话,大概率考察双指针,双指针不应一定是 2 个,也可能超过 2 个,看题目的需求,如果不要求复杂度,很多情况下将链表转为数组或者栈,操作起来更为简单,空间换时间。
如果是两个链表相交的话,遍历完一个链表后,换着遍历另一个链表,这样指针可以同时走到相交的点,这个开了我的脑洞。
(完)
网友评论