算法


反转链表

假设存在链表 1 → 2 → 3 → null,我们想要把它改成 null ← 1 ← 2 ← 3。

在遍历列表时,将当前节点的 next 指针改为指向前一个元素。由于节点没有引用其上一个节点,因此必须事先存储其前一个元素。在更改引用之前,还需要另一个指针来存储下一个节点。不要忘记在最后返回新的头引用!

public ListNode reverseList(ListNode head) {  
    ListNode result = null;
    ListNode current = head;
    while (current != null) {
        ListNode nextNode = current.next;//1
        current.next = result;//2
        result = current;//3
        current = nextNode;//4
    }
    return result;
}

分析过程:

head: 1-2-3-null

result: null

current: =head=1-2-3-null

开始反转:

  1. nextNode=current.next=2-3-null

  2. current=1-null

  3. result=1-null

  4. current=2-3-null

  5. nextNode=3-null

  6. current=2-1-null

  7. result=2-1-null

  8. current=3-null

  9. nextNode=null

  10. current=3-2-1-null

  11. result=3-2-1-null

  12. current=null

最终返回result=3-2-1-null


滑动窗口算法(Sliding Window Algorithm)

滑动窗口(Sliding Window)是一种在计算机科学中用于解决各种子数组或子字符串问题的技术。滑动窗口技术通过维护一个固定大小的窗口在数组或字符串上移动,从而使得可以在较短的时间内解决一些复杂的问题。这种方法在处理一系列数据时特别高效。


最后更新于

这有帮助吗?