题目:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5
示例:
输入:{1,2,3,3,4,4,5}
返回值:{1,2,5}
解法: 想法很简单就是重建一个指针,在遍历原排序的链表时遇到重复的直接跳过,主要考虑到以下特殊情况
function deleteDuplication(pHead)
{
//4.空链表
if(!pHead){
return null
}
//3.原链表只有一个节点
if(pHead && !pHead.next){
return pHead;
}
var node=new ListNode(-1);
var tmp=node;
var pre=pHead;
while(pHead){
//1.前一个节点值不能与下一个节点值相等
//2.这种情况主要考虑最后一个节点的值不能和前一个节点值相等
if((pHead.next && pHead.next.val!==pHead.val) ||
(!pHead.next && pHead.val!==pre.val) ){
tmp.next =pHead;
tmp = pHead;
}
while(pHead.next && pHead.val===pHead.next.val){
pre=pHead;
pHead=pHead.next;
}
pre=pHead;
pHead=pHead.next;
}
tmp.next=null
return node.next;
}