这就是我到目前为止所做的努力。

#include<stdlib.h>

struct node
{
  int data;
  struct node *next;
};

void create(struct node **q)
{
  struct node *r,*t;
  int cnt,i,dat;
  printf("How many nodes?");
  scanf("%d",&cnt);
  for(i=0;i<cnt;i++)
    {
       printf("Enter the data %d  ",i);
       scanf("%d",&dat);
       r=(struct node *) malloc (sizeof(struct node));
       r->data=dat;
       r->next=NULL;

       if(*q==NULL)
       {
         *q=r;
       }
      else
       {
         t=*q;
         while(t->next!=NULL)
           {
             t=t->next;
           }
         t->next=r;
       }
    }
}

void display(struct node **q)
{
  struct node *r;
  r=*q;
  while(r!=NULL)
    {
      printf("%d->",r->data);
      r=r->next;
    }
  printf("\n");
}

void max(struct node **q)
{
  struct node *r;
  int max=0;
  r=*q;
  while((r->next)!=NULL)
    {
       max=r->data;
       r=r->next;
       if((r->data)>max)
       {
         max=r->data;
       }
    }
  printf("The max is %d",max);
  printf("\n");
}

int main()
{
  struct node *head;
  create(&head);
  display(&head);
  max(&head);
}

如果我使用数字1, 2和3作为输入,我的程序当前错误地将2检测为最大元素。我如何修复它,以便它正确地确定3是最大元素?
rutuparna@pucsd-rutuparna:~/C/Datastructures assignment$ gcc linkedmax.c
rutuparna@pucsd-rutuparna:~/C/Datastructures assignment$ ./a.out
How many nodes?3
Enter the data 0  3
Enter the data 1  2
Enter the data 2  1
3->2->1->
The max is 2

最佳答案

循环有一些问题

while((r->next)!=NULL) {
    max=r->data;
    r=r->next;
    if((r->data)>max) {
        max=r->data;
    }
}

行无条件地更新。结合这一事实,测试max=r->data导致您的循环提前退出一个项目,循环现在总是返回第二个最后一个项目的值。
代码应该更改为
while(r!=NULL) {
    if(r->data>max) {
        max=r->data;
    }
    r=r->next;
}

07-27 13:39