分析:
- 首先我们并不知道一个链表的重复结点是哪个,所以我们需要定义一个变量去遍历链表
- 链表是有序的,所以如果有重复的节点,一定是连在一起的
- 而且重复的节点可能有多个,所以需要用循环
- 定义一个cur去遍历数组,在cur不为空指针的条件下进行循环,判断cur.data 是否等于cur.next.data,如果不相等,则说明cur不是重复的节点,反之,它就是重复的结点,具体的实现我们通过代码来展示
代码示例:
//删除一个(已排序)链表中重复的结点
public ListNode removeRepetition() {
ListNode cur = this.head;
ListNode newhead = new ListNode(-1);
ListNode tmp = newhead;
while(cur != null) {
//重复的节点
if(cur.next != null && cur.data == cur.next.data) {
//每一次都需要判断cur.next
while(cur.data == cur.next.data) {
cur = cur.next;
}
cur = cur.next;
}else {
tmp.next = cur;
tmp = cur;
cur = cur.next;
}
}
return newhead.next;
}
结果如下: