代码随想录算法训练营第4天|链表Part02

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

注意递归版本代码,面试可能让再撕。

1
2
3
4
5
6
7
8
9
10
11
12
13
var swapPairs = function (head) {
let dummy = new ListNode(null, head);
if (!head || !head.next) return head;
let pre = dummy, cur, next;
while (pre.next && pre.next.next) {
cur = pre.next, next = pre.next.next;
cur.next = next.next;
next.next = cur;
pre.next = next;
pre = cur;
}
return dummy.next;
};

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

  • 哨兵节点可以消除特判逻辑。
  • 可以借助 n = 1 时的情况辅助思考。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos-1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 不允许修改 链表。

A = (n - 1) (B + C) + C 意味着只要从碰撞点和起点以同样的速度扫描,下次碰撞点一定是环的入口节点。

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×