题目
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
方法
方法一:新增前驱结点
方法二:递归
参考:https://suixinblog.cn/2019/02/target-offer-linked-list-remove-repetition.html
方法一
思路
首先在链表的首部前加一个前驱节点,为了判断头节点是否重复
使用两个指针,current和prev,分别指向当前节点,和当前节点的前驱节点
判断当前节点和下一个节点是否相等,相等则需要做删除处理,将重复节点删除,此时就需要用current指针的前驱节点prev指针了
因为同一个数值的重复节点可能不止两个,所以需要在判断相等后,循环找到所有相等节点一起删除
注意:删除一组相等节点后,current指针和prev指针不可以马上移动,因为删除了一组相等节点,当前位置可能接上了新的相等节点
代码
1 | /*function ListNode(x){ |