Ejemplo n.º 1
0
//删除(删除链表中的第i(1<=i<=n)个位置上的结点)
List *Delete(int i, List *PtrL) {
	List *p, *s;
	
	if(i == 1) {								/*如果删除的是第1个结点*/ 
		s = PtrL;								/*s指向第1个结点*/ 
		if (PtrL != NULL) {						
			PtrL = PtrL->Next;					/*从链表中删除*/ 
		}
		else {
			return NULL;
		}
		free(s);								/*释放被删除结点*/ 
		
		return PtrL;
	}
	p = FindKth(i-1, PtrL);
	if (p == NULL) {							/*如果要删除的结点不存在*/	
		printf("第%d个元素不存在", i-1);
		return NULL;
	}
	s = p->Next;								/*s指向第i个结点*/ 
	if (s->Next == NULL) {						/*如果删除的是最后1个元素*/ 
		p = FindKth(i-1, PtrL);
		free(s);
		return NULL;
	}
	else {
		p->Next = s->Next;						/*从链表中删除*/ 
		free(s);								/*释放被删除结点*/ 		
		return PtrL;
	}
	

}
Ejemplo n.º 2
0
 double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
     int m = nums1.size();
     int n = nums2.size();
     int k = (m + n + 1) / 2;
     double v = (double)FindKth(nums1,0,m-1,nums2,0,n-1,k);
     if((m+n)%2 == 0)
     {
     	int k2 = k + 1;
     	double v2 = (double)FindKth(nums1,0,m-1,nums2,0,n-1,k2);
     	v = (v+v2) / 2;
     }
     return v;
 }
Ejemplo n.º 3
0
const BinaryNode<Etype> *
OrderedSearchTree<Etype>::FindKth( int K, const BinaryNode<Etype> * T ) const
{
    if( T == NULL )
        return NULL;

    int LeftSize = T->Left ? T->Left->Size : 0;

    if( K <= LeftSize )
        return FindKth( K, T->Left );
    if( K == LeftSize + 1 )
        return T;
    return FindKth(  K - LeftSize - 1, T->Right );
}
 int FindKth(vector<int> &nums, int start, int end, int k) {
     if (start == end) return nums[start];
     int left = start + 1, right = end, cur = nums[start];
     while (left <= right) {
         while (left <= right && nums[left] < cur) left ++;
         while (left <= right && nums[right] >= cur) right --;
         if (left < right) {
             swap(nums[left], nums[right]);
         }
     }
     swap(nums[start], nums[right]);
     if (right - start + 1 == k) return nums[right];
     else if (right - start + 1 > k) return FindKth(nums, start, right - 1, k);
     else return FindKth(nums, right + 1, end, k - (right - start + 1));
 }
Ejemplo n.º 5
0
 List *Delete(int i,List *PtrL)
 {
 	List *p,*s;
 	if(i==1){
 		s = PtrL;
 		if(PtrL!=NULL)
 			PtrL = PtrL->Next;
 		else
 			return NULL;
 		free(s);
 		return PtrL;
	 }
	 
	 p = FindKth(i-1,PtrL);
	 if(p==NULL){
	 	printf("第%d个结点不存在",i-1);
	 	return NULL;
	 } else if(p->Next==NULL){
	 	printf("第%d个节点不存在",i);
	 	return NULL;
	 } else {
	 	s=p->Next;
	 	p->Next = s->Next;
	 	free(s);
	 	return PtrL;
	 }
 }
Ejemplo n.º 6
0
	int FindKth(vector<int>& nums1, int al, int ar, vector<int>& nums2, int bl, int br, int k)
	{
		if(al > ar)	return nums2[bl+k-1];
		if(bl > br) return nums1[al+k-1];
		int amid = (al+ar)/2;
		int bmid = (bl+br)/2;
		if(nums1[amid] <= nums2[bmid])
		{
			if(k <= (amid-al)+(bmid-bl)+1)
				return FindKth(nums1,al,ar,nums2,bl,bmid-1,k);
			else
				return FindKth(nums1,amid+1,ar,nums2,bl,br,k-(amid-al)-1);
		}
		else
		{
			if(k <= (amid-al)+(bmid-bl)+1)
				return FindKth(nums1,al,amid-1,nums2,bl,br,k);
			else
				return FindKth(nums1,al,ar,nums2,bmid+1,br,k-(bmid-bl)-1);
		}
	}
Ejemplo n.º 7
0
 List  *Insert(ElementType X,int i,List *PtrL) 
 {
 	List *p,*s;
 	if(i==1) {
 		s = (List *)malloc(sizeof(List));
		s->Data = X;
		s->Next = PtrL;
		return s;	 
	}
	
	p = FindKth(i-1,PtrL);
	if(p == NULL){
		printf("参数i错");
		return NULL;
	} else {
		s = (List *)malloc(sizeof(List));
		s->Data = X;
		s->Next = p->Next;
		p->Next = s;
		return PtrL;
	}
 }
Ejemplo n.º 8
0
//插入(在第i-1(1<=i<=n+1)个结点后插入一个值为X的新结点)
List *Insert(int X, int i, List *PtrL) {
	List *p, *s;
	if (i == 1) {								/*新结点插入在表头*/ 
		s = (List*)malloc(sizeof(List));		/*申请、填装结点*/ 
		s->Data = X;
		s->Next = PtrL;
		return s;								/*返回新表头指针*/ 
	}
	p = FindKth(i-1, PtrL);						/*查找第i-1个结点*/ 
	if (p == NULL) {							/*第i-1个结点不存在,不能插入*/ 
		printf("参数i错");
		return NULL; 
	}
	else {
		s = (List*)malloc(sizeof(List));		/*申请、填装结点*/ 
		s->Data = X;
		s->Next = p->Next;						/*新结点插入在第i-1个结点的后面*/ 
		p->Next = s;
		return PtrL;
	}
	
}
 int findKthLargest(vector<int>& nums, int k) {
     int len = nums.size();
     return FindKth(nums, 0, len - 1, len - k + 1);
 }