We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
反转一个单链表。
示例:
输入: 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} */ var reverseList = function(head) { let prevNode = null; // 前指针节点 //每次循环,都将当前节点指向它前面的节点,然后当前节点和前节点后移 while(head != null) { let tempNode = head.next; //临时节点,暂存当前节点的下一节点,用于后移 head.next = prevNode; //将当前节点指向它前面的节点 prevNode = head; //前指针后移 head = tempNode; //当前指针后移 } return prevNode; };
明确递归函数的定义,reverseList的函数定义是:输入一个节点head, 以head为起点的链表反转,并返回反转之后的头部节点
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} head * @return {ListNode} */ var reverseList = function(head) { if(head === null || head.next === null) { return head; } // 在这里进行递归,用 last 来接收反转之后的头节点 const last = reverseList(head.next); head.next.next = head; // 反转之后,之前的 head变成了最后一个节点,链表的末尾要指向null head.next = null; return last; };
官方题解
The text was updated successfully, but these errors were encountered:
No branches or pull requests
题目描述
反转一个单链表。
示例:
解题思路
1. 使用迭代:
在遍历列表时,将当前节点的 next 指针改为指向前一个元素。由于节点没有引用其上一个节点,因此必须事先存储其前一个元素。在更改引用之前,还需要另一个指针来存储下一个节点。不要忘记在最后返回新的头引用。
解题方法
复杂度分析
2. 使用递归:
明确递归函数的定义,reverseList的函数定义是:输入一个节点head, 以head为起点的链表反转,并返回反转之后的头部节点
解题方法
复杂度分析
参考
官方题解
The text was updated successfully, but these errors were encountered: