题目
删除链表中重复节点
代码实现
public class DeleteDuplication {
/**
* 删除链表中的重复节点
* 1、新建一个头节点,以防止第一个节点被删除。
* 2、保存当前节点的前一个节点,循环遍历整个链表,如果当前节点的值与下一个节点的值相等
* 则将当前节点的值与 next.next节点的值比较,直到不相等或者null为止,
* 最后将当前节点的前一个节点 pre指向最后比较不相等的节点
* 3、如果当前节点与next节点不相等,则直接让节点指针全部向后移动一位
*/
public ListNode deleteDuplication(ListNode head) {
if(head == null)
return null;
ListNode preNode = new ListNode(); // 前一个节点
ListNode tmpNode = preNode;
preNode.next = head;
ListNode curNode = head; // 当前节点
while(curNode != null) {
//判断是否存在重复节点,是否应该删除
if(curNode.next != null && curNode.value == curNode.next.value) {
while(curNode.next != null && curNode.value == curNode.next.value)
curNode = curNode.next;
preNode.next = curNode.next; // 删除相应的重复节点
}
else {
preNode = curNode; // preNode 指针后移
}
curNode = curNode.next;
}
return tmpNode.next;
}
}