删除链表中重复的结点-剑指Offer

删除链表中重复的结点

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

思路

  1. 需要两个指针,一个指向前一个节点preNode,另一个指向当前节点node,如果遇到相等的节点,node向后移动,preNode不动,存下node.val方便后面的比较,直到遇到node和node.next不相等,preNode就可以指向node.next
  2. 注意:链表开头可能就开始有重复的节点,所以默认preNode=null,在后面的给preNode赋值的时候,若preNode为null,那就把pHead设置为node.next

代码

/*
 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 null;
		}
		ListNode preNode = null;
		ListNode node = pHead;
		while (node != null) {
			if (node.next != null && node.val == node.next.val) {
				int value = node.val;
				while (node.next != null && node.next.val == value) {
					node = node.next;
				}
				if (preNode == null) {
					pHead = node.next;
				} else {
					preNode.next = node.next;
				}
			} else {
				preNode = node;
			}
            node = node.next;
		}
		return pHead;
    }
}
posted @ 2016-07-22 20:24  RosenDing  阅读(7833)  评论(1编辑  收藏  举报