描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
示例1
输入: {1,2,3,3,4,4,5}
返回值: {1,2,5}
思路
在遍历单链表的时候,检查当前节点与下一点是否为相同值,如果相同,继续查找祥同值的最大长度
代码:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead) {
if (pHead == null || pHead.next == null) {
//链表节点少于两个的必定没有重复结点
return pHead;
}
ListNode vHead = new ListNode(-1);
ListNode pre = vHead;//新链表尾结点
ListNode cur = pHead;//当前要遍历的结点
while(cur != null) {
if (cur.next != null && cur.val == cur.next.val) {
//需要跳过重复结点
ListNode temp = cur.next;
while(temp.next != null && temp.val == temp.next.val) {
temp = temp.next;
}
cur = temp.next;
} else {
pre.next = new ListNode(cur.val);
cur = cur.next;
pre = pre.next;
}
}
return vHead.next;
}
}