当前位置:实例文章 » HTML/CSS实例» [文章]js实现反转链表的两种方法

js实现反转链表的两种方法

发布人:shili8 发布时间:2024-12-30 04:28 阅读次数:0

**反转链表的两种方法**

在 JavaScript 中,链表是一种常见的数据结构,它由一个个节点组成,每个节点包含一个值和一个指向下一个节点的引用。链表可以用来实现各种算法和数据结构,如栈、队列等。在本文中,我们将讨论如何反转一个链表,及其两种不同的实现方法。

**反转链表的定义**

反转链表是指将链表中的所有节点按照逆序排列。例如,如果原链表为 `1 ->2 ->3 ->4 ->5`,则反转后的链表为 `5 ->4 ->3 ->2 ->1`。

**方法一:迭代法**

首先,我们来看一下迭代法的实现。这个方法通过将每个节点的 next 指针指向其前一个节点来实现反转。

javascriptclass Node {
 constructor(x) {
 this.val = x;
 this.next = null;
 }
}

function reverseList(head) {
 let prev = null;
 let curr = head;

 while (curr !== null) {
 //保存下一个节点的引用 const nextNode = curr.next;

 // 将当前节点的 next 指针指向其前一个节点 curr.next = prev;

 // 移动到下一个节点 prev = curr;
 curr = nextNode;
 }

 return prev; // 返回反转后的链表头部}


在这个实现中,我们使用三个变量来跟踪当前的链表:`prev`、`curr` 和 `nextNode`。我们首先将 `head` 赋值给 `curr`,然后进入一个循环直到 `curr` 为 null。

在每次迭代中,我们保存下一个节点的引用(即 `curr.next`),然后将当前节点的 next 指针指向其前一个节点(即 `prev`)。最后,我们移动到下一个节点(即 `nextNode`)。

循环结束后,我们返回 `prev`,因为它现在指向了反转后的链表头部。

**方法二:递归法**

接下来,我们来看一下递归法的实现。这个方法通过将每个子链表反转,然后合并它们来实现反转。

javascriptfunction reverseList(head) {
 if (head === null || head.next === null) {
 return head; // 如果链表只有一个节点或没有节点,则返回原链表 }

 const newHead = reverseList(head.next); // 反转后续的子链表 head.next.next = head; // 将当前节点的 next 指针指向其前一个节点 head.next = null; // 将当前节点的 next 指针置为 null return newHead; // 返回反转后的链表头部}


在这个实现中,我们首先检查链表是否只有一个节点或没有节点。如果是,则直接返回原链表。

否则,我们递归地反转后续的子链表(即 `head.next`),并将其赋值给 `newHead`。

然后,我们将当前节点的 next 指针指向其前一个节点(即 `head.next = head`),并将当前节点的 next 指针置为 null。

最后,我们返回 `newHead`,因为它现在指向了反转后的链表头部。

**总结**

在本文中,我们讨论了如何反转一个链表,以及其两种不同的实现方法:迭代法和递归法。迭代法通过将每个节点的 next 指针指向其前一个节点来实现反转,而递归法则通过将每个子链表反转,然后合并它们来实现反转。

这两个方法都可以用来实现链表的反转功能,选择哪种方法取决于具体的需求和场景。

其他信息

其他资源

Top