6题目描述:

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

解析:

1.首先定义一个节点数量count为0,定义node节点指向头节点
2.while循环遍历链表,用count记录链表节点数量
3.定义nums数组,把node节点重新指向头节点
4.while循环遍历链表,把链表中的节点从后往前添加到数组中,最后返回nums数组即可

java:

public int[] reversePrint(ListNode head) {
        int count = 0;
        ListNode node = head;
        while(node != null) {
            node = node.next;
            count++;
        }
        int[] nums = new int[count];
        node = head;
        while(node != null) {
            count--;
            nums[count] = node.val;
            node = node.next;
        }
        return nums;
    }

JavaScript:

var reversePrint = function(head) {
    let count = 0;
    let node = head;
    while(node !== null) {
        node = node.next;
        count++;
    }
    const nums = [];
    node = head;
    while(node !== null) {
        count--;
        nums[count] = node.val;
        node = node.next;
    }
    return nums;
};

35题目描述:

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

解析:

HashMap方法:
1.第一次遍历,存value
2.第二次遍历,处理徒弟的指向关系
3.最后返回徒弟链表的头节点

Java:

public Node copyRandomList(Node head) {
        Node curr = head;
        HashMap<Node, Node> map = new HashMap<>();
        while(curr != null) {
            map.put(curr, new Node(curr.val));
            curr = curr.next;
        }
        curr = head;
        while(curr != null) {
            map.get(curr).next = map.get(curr.next);
            map.get(curr).random = map.get(curr.random);
            curr = curr.next;
        }
        return map.get(head);
    }

JavaScript:

var copyRandomList = function(head) {
    let curr = head;
    let map = new Map();
    while(curr !== null) {
        map.set(curr, new Node(curr.val));
        curr = curr.next;
    }
    curr = head;
    while(curr !== null) {
        map.get(curr).next = map.get(curr.next) === undefined ? null : map.get(curr.next);
        map.get(curr).random = map.get(curr.random);
        curr = curr.next;
    }
    return map.get(head);
};