题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
解题思路:
(1)在头部新建一个节点,这样就省去了讨论头部开始重复的情况
(2)剩下的情况见示意图
代码实现
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
//创建新的头结点,省去了判断头部元素是否重复的问题
ListNode result = new ListNode(-1);
result.next = pHead;
//使用cur和next两个指针进行移动分析
ListNode cur = result;
ListNode next = pHead;
boolean hasDuplication = false;
while(next != null) {
//如果存在重复节点,循环,直至找到不重复节点【注意:此处next.next != null 判断不要忘记,手写时容易忘记判断】
while(next.next != null && next.val == next.next.val){
hasDuplication = true;
next = next.next;
}
if(hasDuplication) {
//如果存在循环,则当前位的next指针指向下一位
cur.next = next.next;
} else {
//如果不存在循环,正常移动
cur = next;
}
next = next.next;
hasDuplication = false;
}
return result.next;
}
}
更多算法解答请点击
《剑指offer》66题JAVA代码算法实现全集