题目
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5
数据范围:链表长度满足 0 \le n \le 1000 \0≤n≤1000 ,链表中的值满足 1 \le val \le 1000 \1≤val≤1000
示例1
输入:
{1,2,3,3,4,4,5}
返回值:
{1,2,5}
示例2
输入:
{1,1,1,8}
返回值:
{8}
代码:
public class Solution {
public ListNode deleteDuplication(ListNode pHead) {
if(pHead == null){
return null;
}
if(pHead.next == null){
return pHead;
}
ListNode newHead = new ListNode(0);
ListNode tailNode = newHead;
ListNode newNode = pHead;
//便利链表
while(newNode != null){
if(newNode.next != null && newNode.val == newNode.next.val ){
//发现newNode是重复节点,需要找到接下来不重复的节点位置
while(newNode != null && newNode.next != null
&& newNode.val == newNode.next.val ){
newNode = newNode.next;
}
}else{
//newNode不是重复节点,直接插入tailNode末尾
tailNode.next = new ListNode(newNode.val);
tailNode = tailNode.next;
}
//循环需要往下走一步
newNode = newNode.next;
}
return newHead.next;
}
}