1、在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
public ListNode deleteDuplication(ListNode pHead)
{
ListNode result = new ListNode(0);
result.next = pHead;
ListNode tmp = pHead;
ListNode result2 = result;
while(tmp !=null){
if(tmp.next !=null && tmp.val == tmp.next.val){
while(tmp.next !=null && tmp.val==tmp.next.val){
tmp = tmp.next;
}
tmp = tmp.next;
result.next = tmp;
}else{
tmp = tmp.next;
result = result.next;
}
}
return result2.next;
}
2、现在有一个整数类型的数组,数组中素只有一个元素只出现一次,其余的元素都出现两次。
public int singleNumber(int[] A) {
int result = A[0];
for (int i = 1; i < A.length; i++)
result = result ^ A[i];
return result;
}
现在有一个整数类型的数组,数组中只有一个元素只出现一次,其余元素都出现三次。你需要找出只出现一次的元素
注意:
你需要给出一个线性时间复杂度的算法,你能在不使用额外内存空间的情况下解决这个问题么?
public int singleNumber(int []nums)
{
int ones = 0;
int twos = 0;
int threes = 0;
for(int num : nums)
{
twos = twos | (num&ones);
ones = ones ^ num;
threes = ones & twos;
ones = ones & (~threes);
twos = twos & (~threes);
}
int res = ones | twos;
return res;
}