算法
反转链表
假设存在链表 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
开始反转:
nextNode=current.next=2-3-null
current=1-null
result=1-null
current=2-3-null
nextNode=3-null
current=2-1-null
result=2-1-null
current=3-null
nextNode=null
current=3-2-1-null
result=3-2-1-null
current=null
最终返回result=3-2-1-null
滑动窗口算法(Sliding Window Algorithm)
滑动窗口(Sliding Window)是一种在计算机科学中用于解决各种子数组或子字符串问题的技术。滑动窗口技术通过维护一个固定大小的窗口在数组或字符串上移动,从而使得可以在较短的时间内解决一些复杂的问题。这种方法在处理一系列数据时特别高效。
最后更新于
这有帮助吗?