题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
package 从50题数组中重复的数字开始;
import 从50题数组中重复的数字开始.链表中环的入口节点.ListNode;
public class 删除链表中重复的节点 {
public static class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(3);
ListNode node5 = new ListNode(4);
ListNode node6 = new ListNode(4);
ListNode node7 = new ListNode(5);
node1.next=node2;
node2.next=node3;
node3.next=node4;
node4.next=node5;
node5.next=node6;
node6.next=node7;
ListNode head = deleteDuplication(node1);
// ListNode head = node1;
while (head!=null) {
System.out.print(head.val+",");
head = head.next;
}
}
public static ListNode deleteDuplication(ListNode pHead)
{
if (pHead==null) {
return pHead;
}
ListNode pre = new ListNode(-1);//创建一个头结点,防止题给节点开始就重复,被删除
if (pre.val==pHead.val) {//防止题给头结点值也为-1
pre.val = -2;
}
pre.next = pHead;
ListNode head = pre;//等下要返回需要的头结点
ListNode current = pHead;//从头结点开始遍历
while (current!=null&¤t.next!=null) {
if (current.val==current.next.val) {
int val = current.val;
while (current!=null&¤t.val==val) {
current= current.next;
pre.next = current;
}
}else {
pre=current;
current=current.next;
}
}
return head.next;
}
}