抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

题目描述:

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

示例:

1
2
>输入: 1->2->3->4->5->NULL
>输出: 5->4->3->2->1->NULL

限制:

  1. 0 <= 节点个数 <= 5000

思路

image-20230314205602623

  1. 利用双指针来反转链表
  2. 定义两个指针 prevcurr,初始时 prev 指向 null,curr 指向链表头节点。然后遍历链表,每次将 curr 的下一个节点指向 prev,然后将 prevcurr 分别向后移动一个节点,直到 curr 为 null。
  3. 其中,head 是链表头节点。在 while 循环中,先用 next 保存 curr 的下一个节点,然后将 curr 的下一个节点指向 prev,再将 prevcurr 向后移动一个节点。最后返回 prev,即为反转后的链表头节点。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
//双指针 cur pre
if(head === null){
return null
}
let cur,pre,temp
cur = head
pre = null
temp = null
while(cur){
temp = cur.next
cur.next = pre
pre = cur
cur = temp
}
return pre
};

评论