1.题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。
2.代码实现
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
function deleteDuplication(pHead)
{
if (pHead == null) return null;//空链表返回空
var p = pHead;
var n = new ListNode(0);//创建一个值为0的节点
var pre = n;//pre指向该节点,用来控制新的链表数据
n.next = pHead;//下一个指向pHead
while (p!= null) {//p不为null
var q = p.next;//q为p的下一个节点
if (q == null) break;
if (q.val == p.val) {//前后值相等
while (q != null && q.val == p.val) {
q = q.next;//移动后面的节点,找到不为空并且不相等的下一个节点
}
pre.next = q;//前一个节点等于后一个节点
} else {
pre = p; //pre为上一个
}
p=q;
}
return n.next;
}
运行时间:12ms
占用内存:5336k