算法打卡第二天

98 阅读1分钟

问题

急需需要补充链表相关知识

  1. 剑指 Offer 06. 从尾到头打印链表
  2. 剑指 Offer 24. 反转链表
  3. 剑指 Offer 35. 复杂链表的复制 未完成

剑指 Offer 06. 从尾到头打印链表

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

理解题意 输入一个链表的头结点,即一个对象 (链表从头开始,先进先出原则) 遍历链表,利用数组unshift方法,将链表中的val存进数组中,返回该数组

// 输入:head = [1,3,2]
// 输出:[2,3,1]
var reversePrint = function(head) {
    const arr=[];
    while (head) {
        arr.unshift(head.val)
        head=head.next
    }
    return arr;
};

剑指 Offer 24. 反转链表

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

理解题意 将链表反转

  1. 先声明一个新空链表 prev
  2. 遍历原先的链表,先将当前的节点的next保存一下,然后将当前节点的值创建一个新节点,然后插入到新链表后
// 输入: 1->2->3->4->5->NULL
// 输出: 5->4->3->2->1->NULL

// 执行后的结果
//      head                    prev
// 1    2->3->4->5->NULL      1->NULL
// 2    3->4->5->NULL         2->1->NULL
// 3    4->5->NULL            3->2->1->NULL
// 4    5->NULL               4->3->2->1->NULL
// 5    NULL                  5->4->3->2->1->NULL

var reverseList = function(head) {
    let prev=null;
    while(head){
        const current = head.next;
        head.next = prev;
        prev=head;
        head=current;
    }
}

剑指 Offer 35. 复杂链表的复制(先恶补这一块的知识)

请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。