时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 热度指数:1051693
本题知识点: 链表
题目描述
输入一个链表,反转链表后,输出新链表的表头。
示例1
输入
{1,2,3}
返回值
{3,2,1}
思路:
两个循环,先拿到每个节点的值存入数组,然后创建一条新的链表
function ListNode(x){
this.val = x;
this.next = null;
}
function ReverseList(pHead) {
if (!pHead) return pHead
let arr = [],
zero = new ListNode(0),
revHead = zero
while (pHead) {
arr.unshift(pHead.val)
pHead = pHead.next
}
arr.forEach(n => {
zero.next = new ListNode(n)
zero = zero.next
})
return revHead.next
}
思路:
直接边遍历边反转
从头一步一步逆转到尾,last也就指向头指针,返回last即可
function ReverseList(pHead) {
if (!pHead) return pHead
let last
while(pHead){
let temp = pHead.next
pHead.next = last
last = pHead
pHead = temp
temp = null
}
return last
}