day10
双指针总结
数组 移除某一个元素

快慢一起向后遍历 ,遇到要删除的元素。快先走 ,然后快指针直接覆盖要删除的元素
class Solution {
public int removeElement(int[] nums, int val) {
// 快慢指针
int slowIndex = 0; //快指针是用来找数 慢指针才是用来保存删除某个数之后的数组
for (int fastIndex = 0; fastIndex < nums.length; fastIndex++) {
if (nums[fastIndex] != val) {
nums[slowIndex] = nums[fastIndex];
slowIndex++;
}
}
return slowIndex;
}
}
反转字符串或者数组问题![image]()
一头一尾指针
头尾向中间间遍历,并交换,直至之间相遇
字符串 中某一种字符 替换,剑指offer P51
用双指针 比较麻烦 ,直接使用StringBulider 可变长数组,从头遍历过去O(n)
链表的反转
//双指针法
class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur=head; //cur 头结点开始 pred 空节点开始
ListNode pred=null;
while(cur!=null){
ListNode temp=cur.next; //temp保存 cur之后的指向 防止断连
cur.next=pred; //反转cur 的指向 反转链表
pred=cur; //pred 到下一个位置 也就是 cur
cur=temp; //cur 到下一个位置 也就是 一开始 temp的位置
}
return cur; //经过遍历之后 cur 指向了null 最后终止循环, 所以 头节点应该是pred
//反转一个节点的顺序 :
// 1:先把该节点的下一个节点保存
// 2:反转该节点的方向
// 3: 该节点的前一个指针(先移动pred 再移动cur) 和当前指针向后移动一位 遍历到下一个节点
}
}
posted on 2022-09-30 20:50 你是千堆雪我是长街7 阅读(5) 评论(0) 收藏 举报

浙公网安备 33010602011771号