题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
/**
*在一个排序的链表中,存在重复的结点,
*请删除该链表中重复的结点,重复的结点不保留,返回链表头指针
*例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
*思路:1.创建一个新的节点为了防止第一是重复的元素并且连上原来的链表,遍历原来的元素进行删除
* 2.如果有重复的那么就保存第一节点值,然后进行全部删除。
* 3.如果不是重复正常遍历。之后返回新的链表的头结点。
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{ //新建一个头结点--为防止第一个是重复元素
ListNode first = new ListNode(-1);
//这个头结点的下一个结点为pHead
first.next = pHead;
//p结点为pHead
ListNode p = pHead;
//last结点为新建的头结点
ListNode last = first;
//循环链表
while (p != null && p.next != null) {
//当这个值和下一个值想同时候,说明这两个值都是要删除。
if (p.val == p.next.val) {
//保存第一个值
int val = p.val;
//循环删除。当前值等于重复值的话,就删除。
while (p!= null&&p.val == val)
p = p.next;
//删除完了后,让last指向p
last.next = p;
} else {
//当不想等时候就移动两个指针,并且移动指针。
last = p;
p = p.next;
}
}
return first.next;
}
}