「这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战」
我一个学前端的,对链表这种数据结构真的是不太熟悉;反转链表哪就更不熟悉了,花了点心思,搞定链表反转。通过下面的动画和图片,简单明了表达链表反转;若你看完还不懂链表反转,你来打我
具体思路如下:
定义指针pro为空,表示反转链表后的前一个节点头;
定义指针current指向当前head,表示当前节点指针;
定义next只想current的next,表示下一轮开始的头指针;
第1轮:
将current的next指向pro;这一步非常关键,current的next指针此时应该只想next;此时将current的next指针pro,只想前一个节点头,将当前节点的指针反转,这样current.next和next的关系就断掉了;所以需要next保存current.next.next之后的链表;
current.next与next关系已经断掉,所以pro节点头指针可以前进一步,pro 指向当前的 current
current向前一步,指向next,即current 只想原来的current.next;
next向前一步,只想next.next;这里处理一下边界,next = null的时候不要在让next只想next.next了,代码容易报错
下一轮如上,直至current为null
返回答案即可
动态度
静态图
代码
var reverseList = function(head) {
if(head === null) return null
let pre = null;
let current = head;
let next = head.next;
while(current){
current.next = pre;
pre =current;
current = next;
next = next?next.next:null
}
return pre
};