- 问题描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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)
return pHead;
//标记头结点是否需要删除,需要删除,最后处理
boolean flag =false;
int temp = 0;
if(pHead.next != null && pHead.next.val == pHead.val){
flag = true;
temp = pHead.val;
}
ListNode cur = pHead;
ListNode del = null;
while(cur.next != null && cur.next.next != null){
if(del != null && cur.next.val == del.val){
cur.next = cur.next.next;
}
else if(cur.next.next.val == cur.next.val){
del = cur.next;
cur.next = cur.next.next;
}
else
cur = cur.next;
}
//处理最后一个节点需要删除的情况
if(del != null && cur.next!= null && cur.next.val == del.val)
cur.next = null;
//处理头结点需要删除的情况
while(flag && pHead != null && pHead.val == temp)
pHead = pHead.next;
return pHead;
}
}