void reorderList(ListNode *head) {
     //step 1: count 
     //iterator headPtr = head;
     int len = lengthOfList( head );
     if( len < 3 ){
         return;
     }
     
     //step 2: reverse
     int mid = (len+1)/2;
     iterator midPtr = getMid( head, mid );  
     iterator mn = midPtr->next;
     midPtr->next = NULL;
     midPtr = reverseList( mn );
     
     //step 3: merge
     iterator hn = head->next;
     mn = midPtr->next;
     while( mn != NULL ){
         head->next = midPtr;
         midPtr->next = hn;
         head = hn;
         midPtr = mn;
         hn = head->next;
         mn = midPtr->next;
     }
     head->next = midPtr;
     midPtr->next = hn;
         
     return ;
 }
// Removing Kth from the last element. 
void removeKthFromLast(int index){
	
	node_t *link = head;
	node_t *dlink=NULL;
	
	if(index>lengthOfList()||index<1)
	{
		return;
	}
	
	index = lengthOfList()-index;
	while(index!=1){
		link = link->next;
		index--;
	}
	
	dlink = link->next;
	
	link->next = dlink->next;
	
	free(dlink);

}
void checkPalindrome(node_t **headPtr,int mid){
	node_t *link=NULL;
	node_t *slowPtr,*fastPtr;
	
	ReverseList(headPtr,mid);
	
	//Comparing.
	//
	link = *headPtr;
	slowPtr = fastPtr = link;
	
	//push a link forward.
	if(lengthOfList(*headPtr)%2!=0){
		link=link->next;
	}
	
	while(fastPtr!=NULL){
		fastPtr = fastPtr->next;
		if(fastPtr!=NULL&&fastPtr->next!=NULL){
			fastPtr=fastPtr->next;
			slowPtr=slowPtr->next;
		}
		
	}
	
	slowPtr = slowPtr->next;
	
	while(slowPtr!=NULL){
		if(slowPtr->val!=link->val){
			printf("Not a Palindrome");
			break;
		}
		slowPtr=slowPtr->next;
		link=link->next;
	}
	if(slowPtr==NULL){
		printf("Palindrome");
	}
	
	
	
	//reversing it back.
	ReverseList(headPtr,mid);
	
}
Ejemplo n.º 4
0
List* mergeSort(List* list)
{
	List* newList1 = createList();
	List* newList2 = createList();
	int length = lengthOfList(list);
	if (length != 1)
	{
		Position temp = first(list);
		for (int i = 1; i <= length/2; ++i)
		{
			add(newList1, retrieve(temp, list));
			temp = next(temp, list);
		}
		for (int i = length/2 + 1; i <= length; ++i)
		{
			add(newList2, retrieve(temp, list));
			temp = next(temp, list);
		}
		list = merge(mergeSort(newList1), mergeSort(newList2));
	}
	return list;
}
Ejemplo n.º 5
0
double evaluateValueAsBool(Value* v) {
  double i;
  Value* u;
  if (v->type == 'v') {
    u = valueFromName(((Variable*)v)->name);
    if (u == NULL) return NAN;
    return evaluateValueAsBool(u);
  }
  if (v->type == 'n') {
    return *((double*)v->data);
  }
  if (v->type == 'c') {
    u = evaluateFuncVal((FuncVal*)v);
    if (u == NULL) return NAN;
    i = evaluateValueAsBool(u);
    freeValue(u);
    return i;
  }
  if (v->type == 's') {
    return strlen(((String*)v->data)->val);
  }
  if (v->type == 'b') {
    return ((BoolExpr*)v)->lasteval;
  }
  if (v->type == 'l') {
    if (v->data)
      return lengthOfList(((List*)v->data)->next) +
	(double)((VarTree*)((List*)((List*)v->data)->data)->data)->count;
    else
      return 0.0;
  }
  if (v->type == 'd') {
    return evaluateValueAsBool(evaluateStatements((List*)v->data));
  }
  if (v->type == '0') {
    return 0;
  }
  return 1;
}
int main(){

int choice,element,index;

choice = 0;
while(choice){
	printf("\nWhat would you like to do? ");
	printf("\n1. Insert.");
	printf("\n2. delete");
	printf("\n3. print");
	printf("\n4. search");
	printf("\n5. delete at index");
	printf("\n6. delete key");
	printf("\n0. Exit.");

	scanf("%d",&choice);
	switch(choice){
		case 1:	printf("Enter Element: ");
			scanf("%d",&element);
			insertElement(element);
			break;
		case 2:	printf("Delete Element: ");
			deleteFirst();
			break;
		case 3: printList();
			break;
		case 4:
			printf("Enter Element: ");
			scanf("%d",&element);
			index = searchForIndex(element);
			if(index == lengthOfList()){
				printf("\nElement not found");
			}
			else 
				printf("%d",index);
			break;
		case 5: printf("Enter Element: ");
			scanf("%d",&element);
			deleteElementAtIndex(element);
		case 6: printf("Enter Element: ");
			scanf("%d",&element);
			deleteElement(element);
		case 0: break;
	}
}	
	/// Test Case 1. removing duplicates from searching.
	if(0) {
		insertElement(4);
		insertElement(4);
		insertElement(2);
		insertElement(2);
		insertElement(2);
		printList();
		removeDuplicates_Searching();
		printList();
	}
	// test case 2. For removing kth from the last element.
	
	if(1) {
		insertElement(10);
		insertElement(20);
		insertElement(30);
		insertElement(40);
		insertElement(50);
		printList();
		removeKthFromLast(-1);
		printList();
	}

return 0;
}
int returnIndex(node_t *headPtr){
	int len = lengthOfList(headPtr);
	int result = (len%2==0) ? (len/2):(len/2+1);
	return result;
}
Ejemplo n.º 8
0
int lengthOfList( listOfPaths_t* list)
{
	if (list != NULL) 
		return 1 + lengthOfList(list->next);
	return 0;
}