在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->3->4->5
时间: 2023-04-26 14:03:13 浏览: 153
作业一 链表 重复结点删除.cpp
可以使用双指针的方法,遍历链表,如果当前节点的值与下一个节点的值相同,则将指针移动到下一个不同值的节点,否则将当前节点加入新链表中。最后返回新链表即可。
具体步骤如下:
1. 定义一个新链表,以及两个指针:pre指向新链表的最后一个节点,cur指向当前节点。
2. 遍历链表,如果当前节点的值与下一个节点的值相同,则将指针移动到下一个不同值的节点,否则将当前节点加入新链表中,并将pre指向该节点。
3. 遍历完链表后,将pre的next指针置为null,表示新链表的结尾。
4. 返回新链表的头节点。
代码实现如下:
```
public ListNode deleteDuplication(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode pre = dummy;
ListNode cur = head;
while (cur != null) {
if (cur.next != null && cur.val == cur.next.val) {
while (cur.next != null && cur.val == cur.next.val) {
cur = cur.next;
}
pre.next = cur.next;
cur = cur.next;
} else {
pre = pre.next;
cur = cur.next;
}
}
return dummy.next;
}
```
阅读全文