关于前端:LeetCode-206-反转链表迭代递归

62次阅读

共计 1469 个字符,预计需要花费 4 分钟才能阅读完成。

Hi,大家好,我是小庄。

明天打卡的算法题是 —— LeetCode 206. 反转链表

该题将采纳「迭代法」和「递归法」别离实现

话不多说,一起来学习吧~

一、Leetcode 题目

1、题目地址

点击查看 Leetcode 题目

2、具体题目


二、实现代码

1、思路:迭代法;

(1)具体代码

/**
* Definition for singly-linked list.
* function ListNode(val, next) {* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
/*
思路:迭代法;工夫复杂度:O(n);空间复杂度:O(1)
*/
var reverseList = function(head) {
let pre = null;
let cur = head;
let next = head;
while(cur !== null) {
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
};

(2)运行后果

2、办法:递归法;

(1)具体代码

/**
* Definition for singly-linked list.
* function ListNode(val, next) {* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
/*
思路:递归法实现;工夫复杂度:O(n);
空间复杂度:O(n);
*/
var reverseList = function(head) {if(head === null || head.next === null) {return head;}
let res = reverseList(head.next);
head.next.next = head;
head.next = null;
return res;
};

(2)运行后果

3、补充局部

注:以下为手动构建残缺链表,并采纳迭代法实现。

function ListNode(val) {
this.val = val;
this.next = null;
}
function createList(n) {
let head = null;
while(n) {let tempNode = new ListNode(n);
tempNode.next = head;
head = tempNode;
n--;
}
return head;
}
let head = createList(3);
console.log(head);//1->2->3
function getReverseList(head) {
let pre = null;
let cur = head;
let next = head;
while(cur !== null) {
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
let res = getReverseList(head);
console.log(res);//3->2->1

三、解说视频

点击查看 B 站解说视频

四、补充局部

关注公众号:【深漂程序员小庄】:
内含丰盛的学习资源和面试教训(不限前端、java),还有学习交换群可加,并且还有各大厂大佬可一起交流学习,一起提高~增加小庄微信,回复【加群】,可退出互联网技术交换群。

本文由 mdnice 多平台公布

正文完
 0