删除链表中重复的结点
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 ***
思路
一开始题目没搞懂。。。以为会有1->2->1的情况,然后输出2,做了我好久。。 把题目看懂后就很简单了,设三个指针,一个指向已判断过确认不重复的结点head,一个指向将要判断的结点left,一个指向left右边的结点,用来判断left是否重复,并找到下一个要判断的结点。 head先初始化为链表头。然后判断left与right,如果不想等,将head结点移动到left,如果想等,right一路找到下一个结点 ,并时head连接right。这里还要多一个操作,就是判断头结点是否重复。如果重复要移动头结点,并且要考虑头结点可能多次重复即11223344的情况(wa了三次。。。)。 之后就是移动left结点。完事
Java实现
/*
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){
return pHead;
}
ListNode left = pHead;
ListNode head = new ListNode(0);
head.next = left;
ListNode right = left.next;
while(left != null && left.next != null) {
right = left.next;
if(left.val != right.val) {
head = left;
}
else {
while(right != null && left.val == right.val) {
right = right.next;
}
if(head.next == pHead) {
pHead = right;
}
head.next = right;
}
left = right;
}
return pHead;
}
}