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

京公网安备 11010502036488号