问题
剑指 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. 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
理解题意 将链表反转
- 先声明一个新空链表 prev
- 遍历原先的链表,先将当前的节点的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。