题目:输入一个链表,反转链表后,输出新链表的表头。
首先这是一道链表的题目,我们做这种类似的题最好的做法是先画出链表的结构图,再来想办法解决。
首先反转就是将第一个成为最后一个,最后一个称为第一个。
我们的大方向是从第一个结点开始,向后遍历,然后将每一个的next结点指向上一个结点pre(第一个指向null)
因此我们可以列出一个步骤:
- 定义pre(空)记录当前结点的上一个结点,定义next(空)用来保存记录当前结点的next结点,定义current(当前head)用来保存当前的结点
- 开启循环,条件为current不为空
- 开始结点循环
首先将next指向当前结点的next结点
将当前结点的next指向pre结点
将pre指向current以进位(因为我们要使用保持pre、current、next的顺序)
再将current指向next。
- 返回pre,因为这时的current最后指向了next,next为null,因此只有pre是最后一个数
function ReverseList(pHead) {
var pre=null;
var current=pHead;
var next=pHead;
while (current) {
next=current.next;
current.next=pre;
pre=current;
current=next;
// [current.next,pre,current]=[pre,current,current.next]//使用es6的结构赋值
}
return pre;
}