删除链表中重复的结点
描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。
代码 (Java)
/*
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 null;
ListNode pPreNode = null;
ListNode pNode = pHead;
while (pNode != null) {
ListNode pNext = pNode.next;
if (pNext != null && pNext.val == pNode.val) { // 若需要删除重复节点
int value = pNode.val; // 重复节点的值
while (pNode != null && pNode.val == value) { // 删除重复的值
pNode = pNode.next;
}
if (pPreNode == null) // 若删除的包括头部节点
pHead = pNode;
else
pPreNode.next = pNode; // 指向删除之后的节点(放心,能修改本来的节点的指向
} else { // 不需要删除节点
pPreNode = pNode;
pNode = pNode.next;
}
}
// 若无重复的节点,pHead就是给定的参数;
// 若删除头部,pHead会改变
return pHead;
}
}