题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
参考思路一
用两个结点指针,在遍历的同时将重复的结点删除。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
if(pHead == null || pHead.next == null){
return pHead;
}
//新建一个ListNode来记录原先链表,因为后续会对链表进行操作
ListNode res = new ListNode(Integer.MAX_VALUE);
res.next = pHead;
//这里的ListNode只是指向,并不是重新创建了一个
ListNode pre = res;
//从第一个结点开始比较
ListNode cur = res.next;
while(cur != null ){
//如果结点的值与后一个结点相同,则循环直到下一个不相同值的结点
if(cur.next != null && cur.next.val == cur.val){
while(cur.next != null && cur.next.val == cur.val){
cur = cur.next;
}
cur = cur.next;
pre.next = cur;
}
else{
pre = cur;
cur = cur.next;
}
}
return res.next;
}
}
参考思路二
使用辅助空间,第一次遍历保存重复结点的值;然后第二次遍历删除重复的元素。代码省略。