Leetcode 剑指系列 Day 11 双指针
剑指 Offer 18. 删除链表的节点
很基础的一道题,不做概述,这里没有用双指针,用一个指针即可完成遍历
class Solution {
public:
ListNode* deleteNode(ListNode* head, int val) {
if(!head)
return NULL;
ListNode* mov = head;
if(mov->val == val){
head = head->next;
}
else{
while(mov->next){
if(mov->next->val == val){
ListNode* del = mov->next;
mov->next = mov->next->next;
break;
}
mov = mov->next;
}
}
return head;
}
};
剑指 Offer 22. 链表中倒数第k个节点
解题思路:
双指针,开头一个指针 (fst) 先往前遍历至k个节点,第二个指针 (sec) 开始遍历,当先出发的节点位于第k + 1个节点的时候,后出发的节点应当在第一个节点;
当先出法的节点遍历完成后,也就是fst == null,返回sec
class Solution {
public:
ListNode* getKthFromEnd(ListNode* head, int k) {
int i = 1;
ListNode* fst = head, * sec = head;
while(fst){
fst = fst->next;
if(i > k)
sec = sec->next;
i++;
}
return sec;
}
};