[编程题] 删除链表中的重复节点 (保留重复节点一次)
[编程题] 删除链表中的重复节点 (保留重复节点一次)
题目信息
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->-2>3->4->5
方法
三指针
Java代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
//方法1:直接删除
public ListNode deleteDuplicates(ListNode head) {
ListNode dummy = head;
while(dummy!=null && dummy.next!=null){
if(dummy.val==dummy.next.val){
dummy.next = dummy.next.next;
}else{
dummy = dummy.next;
}
}
return head;
}
//方法2:三指针
public ListNode deleteDuplication(ListNode pHead){
ListNode p0 = pHead;
ListNode p1 = p0.next;
ListNode p2 = p1.next;
while(p1!=null){
//如果没重复的话就指针后移
if(p0.val!=p1.val){
p0 = p0.next;
p1 = p0.next;
p2 = p1.next;
}else{
p0.next = p2; //跨过重复的p1;
//指针重新定位
p0 = p2;
p1 = p0.next;
if(p1!=null){
p2 = p1.next;
}
}
}
//返回
return pHead;
}
}
输出: