1.合并两个有序链表
https://leetcode-cn.com/problems/merge-two-sorted-lists/
递归
迭代
var mergeTwoLists = function(l1, l2) {const a = new ListNode(0)let preNode = awhile (l1 && l2) {if (l1.val < l2.val) {preNode.next = l1l1 = l1.next} else {preNode.next = l2l2 = l2.next}preNode = preNode.next}preNode.next = l1 ? l1 : l2return a.next}
2、删除排序链表中的重复元素
3、合并k个排序链表
分治法
var mergeKLists = function (lists) {/* 分而治之 */if (lists.length <= 1) return lists[0] || null;const newLists = [];for (let i = 0; i < lists.length; i += 2) {newLists.push(merge(lists[i], lists[i + 1]));}return mergeKLists(newLists);};
4、判断链表是否有环
5、环形链表2 返回入环点的索引 done
var detectCycle = function(head) {let fast = headlet slow = headlet flag = 0while(fast && fast.next) {fast = fast.next.nextslow = slow.nextif (slow == fast) {flag = 1break}}if (flag == 0) return null//注意,将fast移动到head部位,再次循环fast = headwhile (fast && slow) {if (fast == slow) {return fast}fast = fast.nextslow = slow.next}};
5、反转链表
var reverseList = function(head) {let node = headlet preNode = nulllet temp = nullwhile (node) {//注意temp = node.nextnode.next = preNodepreNode = nodenode = temp}return preNode};

