题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路:首先明确该链表是一个排序链表,也就是说若出现重复的结点,则这些结点在链表中必定相邻;还需要明确的一点是只要出现重复的结点,则相同的结点都删除;该题我觉得最主要的问题是我们需要找到头结点,因为头结点也许就是一个重复的结点,需要把该结点删除,所以我们可以再新建一个结点,让该结点指向头结点,返回时直接返回该结点的下一个结点即可。
import java.util.List;
import java.util.ArrayList;
/*
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 Head = new ListNode(0);
Head.next = pHead;
ListNode pre = Head;
ListNode last = Head.next;
while(last!=null){
//判断相邻的结点是否相等
if(last.next!=null&&last.val==last.next.val){
while(last.next!=null&&last.val==last.next.val){
last = last.next;
}
pre.next = last.next;
last = last.next;
}else{
pre = last;
last = last.next;
}
}
return Head.next;
}
}