Leetcode.82.删除排序链表中的重复值
题目难度:中等
题目:原题链接
思路:
- 一开始以为只要删除重复元素,一提交,唉怎么错了,才发现题目要求把重复元素和其本身都删掉;
- 注意题目中链表是排序好的元素,所以重复元素会连续出现;
- 因此只需遍历一次链表即可把重复元素删除;
- 由于在删除过程可能会把头节点删除,所以需要建立一个空节点p指向head;
- q指针是工作指针,用于遍历链表;
- q.next与q.next.next元素比较,如果相等,则将q.next.val赋值给temp;
- 之后从q.next往后遍历找与之相等的元素,也就是与temp元素相等的元素,结束条件是q.next为空或者q.next.val!=temp;
- 不相等则元素后移;
- 最后返回p.next即删除重复元素的链表;
- 代码java版
/**
* 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) {
//重复出现的数字只会在相邻区域出现,因此只需要和后一个相比是否相同即可
if(head == null)
{
return head;
}
ListNode p = new ListNode(0,head);
ListNode q = p;
while(q.next != null && q.next.next != null)
{
if(q.next.val == q.next.next.val)
{
int temp = q.next.val;
while(q.next != null && q.next.val == temp)
{
q.next = q.next.next;
}
}else
{
q = q.next;
}
}
return p.next;
}
}