1. 程式人生 > >演算法題007 -- [對給定的排好序的連結串列,刪除重複的元素,只留下出現一次的元素] by java

演算法題007 -- [對給定的排好序的連結串列,刪除重複的元素,只留下出現一次的元素] by java

對給定的排好序的連結串列,刪除重複的元素,只留下出現一次的元素

舉例:
1->1->2, return 1->2. 
1->1->2->3->3, return 1->2->3.

程式碼

package algorithm7;

import algorithm6.ListNode;

public class Algorithm7 {

	public static void main(String[] args) {
		
		/**
		 * 執行結果:
		 * 0--1--1--1--2--2--3--4--
		 * 0--1--2--3--4--
		 */
ListNode test = getListNode1(); System.out.println(test.toString()); test = deleteDuplicates(test); System.out.println(test.toString()); } /**思路:從題目可知,這是一個已經排好序的連結串列 * 那麼重複的節點必然是相鄰的節點 * 只要在遍歷過程中,過濾掉重複的節點就可以 * 所謂過濾其實就是:當節點cur與它的next節點相同時 * 做如下處理:cur.next = cur.next.next; * 直接跳過next節點,到更遠的節點; * 需要注意的是,這裡我們需要注意當重複的節點數大於2的時候,不能為cur繼續賦值。 * 有點:時間複雜度 O(n) * * @param listNode * @return */
public static ListNode deleteDuplicates(ListNode listNode) { ListNode currentNode = listNode; while(currentNode != null && currentNode.next != null) { if(currentNode.content == currentNode.next.content) { currentNode.next = currentNode.next.next; }else { currentNode = currentNode.
next; } } return listNode; } public static ListNode getListNode1() { ListNode listNode2 = new ListNode(0); ListNode listNode4 = new ListNode(1); ListNode listNode6 = new ListNode(1); ListNode listNode8 = new ListNode(1); ListNode listNode10 = new ListNode(2); ListNode listNode11 = new ListNode(2); ListNode listNode12 = new ListNode(3); ListNode listNode13 = new ListNode(4); listNode2.next = listNode4; listNode4.next = listNode6; listNode6.next = listNode8; listNode8.next = listNode10; listNode10.next = listNode11; listNode11.next = listNode12; listNode12.next = listNode13; return listNode2; } public static ListNode getListNode2() { ListNode listNode2 = new ListNode(0); ListNode listNode4 = new ListNode(0); ListNode listNode6 = new ListNode(0); ListNode listNode8 = new ListNode(0); ListNode listNode10 = new ListNode(0); ListNode listNode11 = new ListNode(0); ListNode listNode12 = new ListNode(0); ListNode listNode13 = new ListNode(0); listNode2.next = listNode4; listNode4.next = listNode6; listNode6.next = listNode8; listNode8.next = listNode10; listNode10.next = listNode11; listNode11.next = listNode12; listNode12.next = listNode13; return listNode2; } }