完整高频题库仓库地址:https://github.com/hzfe/awesome-interview
完整高频题库阅读地址:https://febook.hzfe.org/
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
本方法是对链表进行遍历,然后在访问各节点时修改 next 的指向,达到反转链表的目的。
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
const reverseList = (head) => {
let cur = head; // 正向链表的头指针
let pre = null; // 反向链表的头指针
while (cur) {
const temp = cur.next; // 暂存当前节点的后续节点,用于更新正向链表
cur.next = pre; // 将当前节点指向反向链表,这是一个建立反向链接的过程
pre = cur; // 更新反向链表的头指针为当前已处理的节点,反向链表的该轮构建完成
cur = temp; // 将正向链表头指针替换为暂存的节点,正向链表处理完成,开始下一轮处理
}
return pre;
};
当使用递归对链表进行处理时,从链表的第一个节点出发,然后找到最后一个节点,该节点就是反转链表的头结点,然后进行回溯处理。
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
const reverseList = (head) => {
// 判断当前节点是否还需要处理
if (head == null || head.next == null) {
return head;
}
// 递归处理后续节点
const reverseHead = reverseList(head.next);
// 局部反转节点
head.next.next = head;
head.next = null;
return reverseHead;
};
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。