目錄java
給定一個排序鏈表,刪除全部重複的元素,使得每一個元素只出現一次。指針
這是一道標星爲簡單的題,難度不是很大。須要注意的幾點是:code
public static ListNode deleteDuplicates(ListNode head){ //已排序的鏈表 ListNode currNode = head; //若是後一值和前一值相等,前一值的next指向後一值的next while(currNode!=null&&currNode.next!=null){ if(currNode.val==currNode.next.val){ currNode.next = currNode.next.next; }else{ //不相等的狀況,就讓前指針向後移 currNode = currNode.next; } } return head; }
刪除鏈表中等於給定值val的全部節點。排序
個人初步想法是:element
固然,我並無考慮要刪除的多個元素都出如今頭節點的狀況,若是考慮這點,哨兵節點的好處就體現出來了。leetcode
當要刪除的一個或多個節點位於鏈表的頭部時,能夠利用哨兵節點,使鏈表標準化,即便鏈表永不爲空,永不無頭,簡化插入和刪除的操做。rem
ListNode sentinel = new ListNode(0);
sentinel.next = head;
public ListNode sentinelRemove(ListNode head,int val){ //建立哨兵節點,指向head ListNode sentinel = new ListNode(0); sentinel.next = head; //定義兩個指針,前向指向哨兵節點,當前指向head ListNode prev = sentinel; ListNode curr = head; while(curr!=null){ if(curr.val == val){ //當前節點值就是指定值,則讓上一個節點的next指向下一個節點 prev.next = curr.next; }else{ //上一個節點向後移 prev = curr; } //遍歷下一節點 curr = curr.next; } //返回哨兵節點的下一節點 return sentinel.next; }
給定一個排序鏈表,刪除全部含有重複數字的節點,只保留原始鏈表中 沒有重複出現 的數字。get
一樣是刪除鏈表中的重複元素,第一道題是保留一個便可,這個題的意思就是一個不留。須要注意的是:it
這道題,咱們仍是能夠利用哨兵節點:io
public ListNode deleteDuplicates(ListNode head) { //建立哨兵節點,指向head ListNode sentinel = new ListNode(0); sentinel.next = head; ListNode prev = sentinel,curr = head; //當前位置且下一位置都不爲空 while(curr!=null&&curr.next!=null){ //若是下一位和這位重複 if(curr.val == curr.next.val){ //向後尋找,知道curr爲不重複的元素 int val = curr.val; while(curr!=null&&curr.val==val){ curr = curr.next; } //刪去重複元素 prev.next = curr; }else{ //不重複的狀況 //兩個指針分別向後移動 prev = curr; curr = curr.next; } } return sentinel.next; }