这个题还算比较简单(但是我刚开始也没想通),我最开始的想法,是从链表最后一个结点开始,把next全部之前前面的结点,但是遍历到最后,就无法反向遍历了(不知道双向链表能不能做到)。


看了一眼题解,发现需要用两个变量存储前一个结点和后一个结点(算上遍历变量一共3个)。 

代码如下:

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode cur = head;
        ListNode curPrev = null;
        ListNode curNext = null;
        while(cur!=null){
            curNext=cur.next;
            cur.next=curPrev;
            curPrev=cur;
            cur=curNext;
        }
        return curPrev;
    }
}

 一些细节点:

curNext初始值不能设置为cur.next,因为不知道头结点是否为空。

循环中的赋值注意先后顺序。

注意遍历结束时的位置,是应该返回cur还是curPrev还是curNext。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐