算法题:

  • 链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/
  • 题目描述及示例

    1. 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
    2. 输入:head = [1,2,3,4]
    3. 输出:[2,1,4,3]
  • 解题

    1. var swapPairs = function(head) {
    2. let VirtualHeadNode = new ListNode(0)
    3. VirtualHeadNode.next = head
    4. let tmp = VirtualHeadNode
    5. while (tmp.next !==null && tmp.next.next !==null) {
    6. const node1 = tmp.next
    7. const node2 = tmp.next.next
    8. tmp.next = node2
    9. node1.next = node2.next
    10. node2.next = node1
    11. tmp = node1
    12. }
    13. return VirtualHeadNode.next
    14. };
  • 遇到的问题

    • 一开始想的比较复杂,判断了head.next 以及head.next.next 是否为空,通过创建虚拟头节点可以解决这个问题
    • 每次走两步,凉凉节点进行交换

      手写题:

  • 链接:https://bigfrontend.dev/zh/problem/implement-your-own-Object-create

  • 题目
    • Object.create() 可以用来创建新的对象。
    • 你能实现一个myObjectCreate()来实现(大概)相同的逻辑吗 ?
    • 注意
      • Object.create的第二个参数不用实现,忽略即可。
      • 如果传入的不是object,请throw error。 (为什么?)
      • 请不要直接使用Object.create() 和 Object.setPrototypeOf()
  • 解题
    1. function myObjectCreate(proto) {
    2. // your code here
    3. if (typeof proto !== 'object' || proto === null) throw new Error('');
    4. const obj = {};
    5. obj.__proto__ = proto;
    6. return obj;
    7. }