本文是在學(xué)習(xí)中的總結(jié),歡迎轉(zhuǎn)載但請注明出處:http://blog.csdn.net/pistolove/article/details/41728739
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given 1->1->2
, return 1->2
.
Given 1->1->2->3->3
, return 1->2->3
.
思路:
(1)題意為移除已排序鏈表中重復(fù)元素。
(2)首先,對頭結(jié)點進(jìn)行判空,為空則返回空。不為空設(shè)定first指向head。
(3)其次,判斷first的后續(xù)節(jié)點second是不是為空,如果不為空,則比較它們值是不是相同。如果值不同,則節(jié)點first指向second,
second指向first的后續(xù)節(jié)點,循環(huán)繼續(xù);如果值相同,設(shè)置節(jié)點last指向second的后續(xù)節(jié)點,如果last不為空,并且last的值
和first的值相同(說明連續(xù)3個節(jié)點值相同),last指向其后續(xù)節(jié)點,循環(huán)直到ast為空或first的值和last的值不同,此時,
如果last不為空,則first的后續(xù)節(jié)點為last,first指向last,second指向first的后續(xù)位置,循環(huán)繼續(xù),如果last為空,說明已
遍歷到最后節(jié)點,此first的后續(xù)節(jié)點指向null,返回head。
(4)其指向進(jìn)程可以簡單以下所示:
例如:1->1->2->3->3->3->4->5->5->5
(A)first=1,second=1,first=second,則last=2,由于first!=last,所以first=2,second=3;
(B)first=2,second=3,first!=second,則first=3,second=3;
(C)first=3,second=3,first=second,則last=3,由于first=last,循環(huán)直到last==null或first!=last,此時last=4,則first=4,second=5;
(D)first=4,second=5,first!=second,則first=5,last=5;
(E)first=5,last=5,first=second,last=5,由于first=last,循環(huán)直到last==null或first!=last,此時last=null,則first.next=null,返回head。
算法代碼實現(xiàn)以下: