82.刪除排序連結串列中的重複元素
阿新 • • 發佈:2019-01-05
這個題一開始沒寫出來,我當時的思路是在找一個父節點而對於父節點怎麼設定無從下手。
下面這個演算法是首先建立一個父節點,然後去遍歷整個連結串列如果連結串列不為空的話繼續迴圈
而對於一個連結串列有兩種情況的點。
一個:點是當前節點的值等於下一個節點的值。如果相等需要找到所有相等的值然後複製給父節點。
另一個:是當前節點的值不等於下一個節點的值。不相等的話就繼續往下面遍歷。
對於連結串列自己的一點點誤區,是在迴圈的時候到底是選擇head!=null 還是採用head.next!=null
現在的理解是:如果需要比較的臨近的ListNode的話需要採用的條件是head.next!=null && head != null
如果比較的不是相鄰的兩個ListNode而是在遍歷比較的話則需要比較的是 head!=null
public class Solution { public static ListNode deleteDuplicates(ListNode head){ ListNode fatherNode = new ListNode(-1); ListNode p = fatherNode; while(head != null && head.next!=null){ if(head.val == head.next.val){ while(head.next!=null && head.val == head.next.val){ head = head.next; } head = head.next; }else{ p.next = head; p = p.next; head = head.next; } } p.next = head; return fatherNode.next; } public static void main(String[] args){ ListNode l1 = new ListNode(1); ListNode l2 = new ListNode(2); ListNode l3 = new ListNode(3); ListNode l4 = new ListNode(3); ListNode l5 = new ListNode(4); ListNode l6 = new ListNode(4); ListNode l7 = new ListNode(5); l1.next = l2; l2.next = l3; l3.next = l4; l4.next = l5; l5.next = l6; l6.next = l7; l7.next = null; ListNode temp = deleteDuplicates(l1); while(temp!=null){ System.out.print(temp.val+" "); temp = temp.next; } } }