1.题目
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
来源:力扣(LeetCode)
链接:83删除链表中重复的元素
2.分析
将一个有序链表中的重复元素删除,根据链表的特性,可以定义一个头节点来链接不重复的数,用指针遍历节点
首先判断是否重复,重复指针走向链表的下一节点,直到不重复,此时指针指向最后一个互相重复的节点,将其
连接到新的头节点上头节点指针往后走一位,然后指针指向此节点的下一节点,开始新的判断。若不重复,
直接链接到头节点之后。此问题的关键在于判断链表的边界,在判断和遍历的过程中需要多次判断链表节点的最后一位
3.代码示例
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head==null){
return null;
}else if(head.next==null){
return head;
}
ListNode newhead = new ListNode();
ListNode tmp = newhead;
ListNode ret = head;
while(ret!=null){
if(ret.next!=null&&ret.val == ret.next.val){
while (ret.next!=null&&ret.val==ret.next.val){
ret=ret.next;
}
}
tmp.next=ret;
tmp = tmp.next;
ret = ret.next;
}
newhead =newhead.next;
return newhead;
}
}