2012-01-28 5 views
0
void addToEnd() 
{ 
    newnode = (struct node*)malloc(sizeof(struct node)); 

    printf ("Enter the customer name :"); 
    scanf ("%s", newnode->cName); 

    printf ("\nEnter customer number :"); 
    scanf ("%d", &newnode->cNumber); 

    printf ("\nEnter transaction description :"); 
    scanf ("%s", newnode->tDescrip); 

    newnode->next = NULL; 
    if(list==NULL) 
     list = newnode; 
    else if (list != NULL && newnode < list) 
    { 
     newnode->next = list; 
     list = newnode; 
    } 
    else 
    { 
     temp = list; 
     while (temp != NULL) 
     { 
      if (newnode > temp) 
      { 
       prev = temp; 
       temp = temp->next; 
      } 
     } 
     newnode->next = prev->next; 
     prev->next = newnode; 
    } 
} 

이 코드를 시도했지만 시작 코드는 끝까지 추가하지 않고 끝점에 노드를 추가하는 방법은 무엇입니까?마지막에 노드를 추가하는 방법 (단일 연결 목록)

+1

당신은 끝을 찾을 필요가 링크 된 목록에 노드를 추가하기위한 다음 APPEND의 기능을 연구하십시오. –

답변

2

다음 내용을 쉽게 이해할 수 있는지 여부를 알아 보겠습니다.

는 단순히 포인터를 변경 :

struct node** tail = &list; 
while (*tail != NULL) { 
    tail = &((*tail)->next); 
} 
*tail = newnode; 
+0

이 코드가 드물게 발견되는 이유는 무엇입니까? C가 Java보다 표현력이 뛰어난 장소 중 하나입니다. 'if', 간결한 코드가 없습니다. –

1

append(int num) 
{ 
    struct node *temp,*r; 
    /* CREATING A NODE AND ASSIGNING A VALUE TO IT */ 

    temp= (struct node *)malloc(sizeof(struct node)); 
    temp->data=num; 
    r=(struct node *)p; 

    if (p == NULL) /* IF LIST IS EMPTY CREATE FIRST NODE */ 
    { 
     p=temp; 
     p->next =NULL; 
    } 
    else 
    { /* GO TO LAST AND ADD*/ 

     while(r->next != NULL) 
      r=r->next; 
      r->next =temp; 
      r=temp; 
      r->next=NULL; 
    } 
}/* ADD A NEW NODE AT BEGINNING */