又是一道链表的题,要求去除链表中的所有重复元素。问题的关键还是在于记录重复节点的前一节点以及找到该节点正确的下一节点。 由于是思路和之前的题目类似。 利用常数空间,时间代价为O(n)。
遍历所有节点,记录最近的只出
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode st=null;
ListNode res=null;
boolean first = true;
ListNode p=head;
//ListNode pre=null;
ListNode dpre=null;
while( p!=null )
{
if( p.next!=null && p.val==p.next.val )
{
if( st==null )
{
st=p;
}
}
else
{
if( st!=null )
{
if( dpre!=null )
{
dpre.next=p.next;
}
st=null;
}
else
{
if( first==true )
{
res=p;
first=false;
}
dpre=p;
}
}
pre=p;
p=p.next;
}
return res;
}
}
现一次的节点dpre和重复出现节点的初始节点st。并不断修改dpre的next节点即可。