题目:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路:
我们现创建一位伪头节点,以免碰到第一个节点值和第二个节点值就相同的情况。然后设置 prev ,node 指针, prev指针指向当前确定不重复的那个节点,而node指针相当于工作指针,一直往后面搜索。如果确定重复范围了,我们就将prev节点的下一个直接指向node指针的下一个。
具体代码实现如下:
public class Solution {
public ListNode deleteDuplication(ListNode pHead){
if (pHead == null || pHead.next == null) {
return pHead;
}
ListNode newHead = new ListNode(0);
newHead.next = pHead;
ListNode prev = newHead;
ListNode node = prev.next;
while (node != null) {
if (node.next != null && node.val == node.next.val) {
while (node.next != null
&& node.val == node.next.val) {
node = node.next;
}
prev.next = node.next;
node = node.next;
} else {
prev = prev.next;
node = node.next;
}
}
return newHead.next;
}
}
测试结果如下: