【LeetCode系列】单链表反转

单链表反转

方法一:迭代

假设链表为
null → 1 → 2 → 3 → 4 → 5
反转后:
null ← 1 ← 2 ← 3 ← 4 ← 5
在遍历链表时,将当前节点的 \textit{next}next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。

public class ListNode {
      int val;
      ListNode next;
      ListNode() {}
      ListNode(int val) { this.val = val; }
      ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode preNode = null;
        ListNode curNode = head;
        while(curNode != null){
            ListNode next = curNode.next;
            curNode.next = preNode;
            preNode = curNode;
            curNode = next;
        }
        return preNode;
    }
}

复杂度分析

时间复杂度:O(n),其中 n 是链表的长度。需要遍历链表一次。

你可能感兴趣的:(leetcode,leetcode,链表,算法)