[LeetCode]83. 删除排序链表中的重复元素(java实现)链表双指针
1. 题目
2. 读题(需要重点注意的东西)
思路:
注意: 只将重复的元素删掉,不用将重复的元素全部删完
用指针p和q初始化都指向head,如果p.val == q.val ,则q向后移动一位直到p与q指向的值不同;
然后将p.next 指向q,然后更新指针 p = q,重复如上判断,直至q指向null为止。
3. 解法
---------------------------------------------------解法---------------------------------------------------
/**
* Definition for singly-linked list.
* 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 deleteDuplicates(ListNode head) {
ListNode p = head;
ListNode q = head;
while(q != null){
while(q != null && p.val == q.val) q = q.next;
p.next = q;
p = q;
}
return head;
}
}
可能存在的问题:
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
- 双指针算法
6. 总结
双指针算法要注意特断指针指向null的情况