链表的考点
链表很多时候都是考察基本功,因为链表题大部分都不是很复杂,主要是对指针的操作,当然也有难的。
简单的题目包括 删除/插入节点、翻转、去重、排序等,难度高一些的题目依然是这些,不过会有一些条件,比如多个链表或者局部操作。
对链表题的两个技巧:
- 如果不确定最终结果的head,比如对两个链表进行排序,那么新建一个 dummy node。
- 可以通过快慢指针的方式取中间节点
入门题:
第一题 https://leetcode.com/problems/reverse-linked-list/
翻转链表,最最基本的一个操作。
var reverseList = function(head) {
if(!head || !head.next) return head;
var h = head, prev = null;
while(h) {
var t = h.next;
h.next = prev;
prev = h;
h = t;
}
return prev;
};
第二题 https://leetcode.com/problems/remove-duplicates-from-sorted-list/
去重,基本思路就是找到一个节点 h
,使 h.val = h.next.val
,然后删除 h.next
,如果重复到链表结束。
var deleteDuplicates = function(head) {
if(!head || !head.next) return head;
var h = head;
while(h && h.next) {
if(h.val == h.next.val) {
h.next = h.next.next;
} else {
h = h.next;