题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路
因为不确定头节点是否重复,所以要先定义一个预节点Head,如果当前节点与下一个节点的val相同,并且下一个节点不为空,则通过循环将重复节点找到,否则的话,当前节点与下一个节点不同或者当前这个节点是最后的一个节点,则将当前这个节点加入Head链表,遍历完成整个链接,返回Head.next;
代码
public ListNode deleteDuplication(ListNode pHead) {
if(pHead == null || pHead.next == null){
return pHead;
}
ListNode headNode = new ListNode(0);
ListNode nextNode = headNode;
ListNode iNode = pHead;
while(iNode != null){
if(iNode.next != null && iNode.val == iNode.next.val){
// 找到与当前相同的节点的所有节点
while(iNode.next != null && iNode.val == iNode.next.val){
iNode = iNode.next;
}
iNode = iNode.next;
}else {
// 不同
ListNode tempNode = new ListNode(iNode.val);
nextNode.next = tempNode;
nextNode = nextNode.next;
iNode = iNode.next;
}
}
return headNode.next;
}