一、原题
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循环之外在判断一次即可。
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
新闻热点
疑难解答