反转链表


反转链表

https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=295&sfm=html&channel=nowcoder

题?的主要信息:

  • 给定一个长度为n的链表,反转该链表,输出表头

迭代(推荐使用)能用迭代尽量用迭代。

具体做法:

1.优先处理空链表,空链表不需要反转。

2.我们可以设置两个指针,一个当前结点的指针,一个上一个结点的指针(初始为空)。

3.遍历整个链表,每到一个结点,断开当前结点与后面结点的指针,并用临时遍历记录后一个结点,然后当前结点指向上一个结点。

4.再轮换当前指针与上一个指针,让它们进入下一个结点及下一个结点的前序结点。


答案:

public class Solution {
    public ListNode ReverseList(ListNode head) {
       if (head == null){
           return null;
       }
        ListNode cur = head;
        ListNode pre = null;
        while(cur != null){
            ListNode temp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = temp;
        }
        return pre;
    }
}