题目连接:反转链表
对给定头的链表进行翻转,可以分为两种情况:
- 如果是只有一个节点,或者是空链表,则直接返回头节点
- 如果不是,则对链表中节点的
next属性进行修改
可以看下两个节点的链表翻转,如下图:
反转节点需要知道当前节点、当前节点的前节点、当前节点的下个节点,在反转时,先保存下个节点next = cur.next,并令当前节点的下个节点指向pre,然后移动pre和cur节点指向即可。
遍历到结尾的时候,cur为空,pre指向最后一个节点,而该节点恰好又应该是链表的遍历起始节点,因此还需要令头节点head = pre。
具体用代码实现即是
function ReverseList(head) {
if(!head || !head.next) return head;
let pre = null, cur = head
while(cur) {
let next = cur.next
cur.next = pre
pre = cur
cur = next
}
head = pre
return head;
}