其他分享
首页 > 其他分享> > 反转链表

反转链表

作者:互联网

题目描述

  1. 题目地址:http://mtw.so/6jyXMj
  2. 题目要求

给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
数据范围:0≤n≤1000
要求:空间复杂度O(1) ,时间复杂度 O(n) 。

  1. 题目示例
    如当输入链表{1,2,3}时,
    经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
    以上转换过程如下图所示:

示例1

输入:{1,2,3}
输出:{3,2,1}

示例2

输入:{ }
返回值:{ }
说明:空链表则输出空

解题思路

  1. 我们要注意边界条件处理:
    链表为空时,代码是否能正常工作?
    如果链表只包含一个结点时,代码是否能正常工作?
  2. 需要创建两个指针p1和p2,p1用来记录当前链表pHead 后面的链表,p2 指针用来创建新的反转链表。

解题代码

function ReverseList(pHead){

if(pHead == null || pHead.next == null){     // 判断链表为空或长度为1的情况
return pHead;
}
let p1= null,
p2 = null;
while(pHead!=null){
p1= pHead.next          //   第一步:指针指向pHead 后面的链表;
pHead.next =p2          //   第二步:记录反转链表的位置
p2 = pHead               //第三步:反转链表的位置指向反转链表的新的头节点
pHead = p1               //第四步:将计算链表的pHead.next设置为表头,重新循环
}
return p2

}
module.exports = {
ReverseList : ReverseList
};

标签:p2,p1,反转,链表,pHead,null
来源: https://www.cnblogs.com/xiayuxue/p/16584787.html