一、原題
Given a sorted linked list, delete all duplicates such that each element appear only once. For example, Given1->1->2, return 1->2. Given 1->1->2->3->3, return 1->2->3. 一、中文
給定一個單鏈表,刪除重復的元素,相同的只保留一個。
Given 1->1->2, return 1->2. Given 1->1->2->3->3, return 1->2->3.
使用兩個指針,一前一后,如果兩個指針的value不相等就逐個進行移動,如果相等就刪除一個,值得注意的是最后一對元素相等的時候也不能進行判斷,所以要在while循環(huán)之外在判斷一次即可。
package code;public class LeetCode46{ public static void main(String args[]){ ListNode list1 = new ListNode(1); ListNode list2 = new ListNode(2); ListNode list3 = new ListNode(2); ListNode list4 = new ListNode(4); ListNode list5 = new ListNode(4); list1.next = list2; list2.next = list3; list3.next = list4; list4.next = list5; ListNode list = deleteDuplicates(list1); while(list != null){ System.out.PRintln(list.val); list = list.next; } } //刪除排序鏈表中重復的元素 public static ListNode deleteDuplicates(ListNode head) { ListNode left = head; ListNode right = head.next; if(head == null || head.next == null){ return head; } while(right.next != null){ if(left.val == right.val){ right = right.next; left.next = right; } if(left.val != right.val){ right = right.next; left = left.next; } } //由于前面不能對最后的兩個元素進行判斷,所以再進行一次判斷 if(left.val == right.val){ left.next = null; } return head; } }-----------------------------------------output---------------------------------------------124
新聞熱點
疑難解答