2014-12-26 4 views
-1

Я хочу, чтобы отсортировать LinkedList и я писал этот код:LinkedList рода без повторения

courseList *sortList(courseList *list) 
{ 

// 
if(list == NULL || list->nextCourse == NULL) 
    return list; // the list is sorted. 

//replace largest node with the first : 

//1- find largest node : 
courseList *curr, *largest,*largestPrev ,*prev; 
curr = list; 
largest = list; 
prev = list; 
largestPrev = list; 
while(curr != NULL) { 

     if(strcmp(curr->courseName,largest->courseName)<0)/*curr->num > largest->num*/ { 
      largestPrev = prev; 
      largest = curr; 
     } 
     prev = curr; 
     curr = curr->nextCourse; 
    } 
//largest node is in largest. 

//2- switching firt node and largest node : 
courseList *tmp; 
if(largest != list) 
{ 
    largestPrev->nextCourse = list; 
    tmp = list->nextCourse; 
    list->nextCourse = largest->nextCourse; 
    largest->nextCourse = tmp; 
} 

// now largest is the first node of the list. 

// calling the function again with the sub list : 
//   list minus its first node : 
largest->nextCourse = sortList(largest->nextCourse); 


return largest; 
} 

Например, мой LinkedList, как это:

MATH101 CSE100 MATH259 BLAW203 MATH101 STAT253 STAT253 MATH259 MATH259 HIST111 STAT253

И это то, что я получаю:

BLAW203 CSE100 HIST111 MATH101 MATH101 MATH259 MATH259 MATH259 STAT253 STAT253 STAT253

Но я хочу, чтобы выяснить, как избавиться от этого повторения

+0

Написать отдельную функцию, чтобы удалить дубликаты, и называют это перед сортировкой , – Barmar

+0

без вызова какой-либо функции, могу ли я организовать этот код? – SemihY

+1

Возможно, добавьте случай, когда 'strcmp (curr, наибольший) == 0', чтобы удалить узел. – Barmar

ответ

1

Это поможет вам удалить повторяющуюся строку:

courseList *sortList(courseList *list) 
{ 
    // 
    if(list == NULL || list->nextCourse == NULL) 
     return list; // the list is sorted. 

    //replace largest node with the first : 

    //1- find largest node : 
    courseList *curr, *largest,*largestPrev ,*prev; 
    curr = list; 
    largest = list; 
    prev = list; 
    largestPrev = list; 
    while(curr != NULL) 
    { 
      if(strcmp(curr->courseName,largest->courseName)<0)/*curr->num > largest->num*/ { 
       largestPrev = prev; 
       largest = curr; 
      } 
      prev = curr; 
      curr = curr->nextCourse; 
    } 
    //largest node is in largest. 

    //2- switching first node and largest node : 
    courseList *tmp; 
    if(largest != list) 
    { 
     largestPrev->nextCourse = list; 
     tmp = list->nextCourse; 
     list->nextCourse = largest->nextCourse; 
     largest->nextCourse = tmp; 
    } 

    // now largest is the first node of the list. 

    // calling the function again with the sub list : 
    //   list minus its first node : 


    // *****Changed******* 

    courseList *next_node = sortList(largest->nextCourse); 

    // Removing Repetition 
    while(next_node != NULL) 
    { 
     if(strcmp(next_node->courseName,largest->courseName)==0) 
      next_node = next_node->nextCourse; 
     else 
      break; 
    } 
    largest->nextCourse = next_node; 

    // *****Changed******* 

    return largest; 
} 
Смежные вопросы