刪除鏈表中重復的結點-劍指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; } }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM