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;
    }