刪除鏈表中重復的結點
題目描述
在一個排序的鏈表中,存在重復的結點,請刪除該鏈表中重復的結點,重復的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理后為 1->2->5
思路
- 需要兩個指針,一個指向前一個節點preNode,另一個指向當前節點node,如果遇到相等的節點,node向后移動,preNode不動,存下node.val方便后面的比較,直到遇到node和node.next不相等,preNode就可以指向node.next
- 注意:鏈表開頭可能就開始有重復的節點,所以默認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; } }
