答疑解惑必采纳 2021-08-18 13:38 采纳率: 91.3%
浏览 59
已结题

C语言,补全一下这个代码,其他代码不要改动

从最高点开始,向右从大到小的顺序排列,如下图
img
struct node {
int height;
struct node *next;
};

// ADD ANY FUNCTION DECLARATIONS YOU WISH TO USE HERE

struct node *mountaineer(struct node *head) {
// TODO: COMPLETE THIS FUNCTION

return head;

}
void print_and_free_list(struct node *head) {
if (head == NULL) {
printf("\n");
return;
}
printf("%d, ", head->height);
print_and_free_list(head->next);
free(head);
}

struct node *make_list(int length, char *argv[]) {
struct node *head = malloc(sizeof (struct node));
struct node *n = head;
int i = 0;
while (i < length) {
n->height = strtol(argv[i + 1], NULL, 10);
if (i < length - 1) {
// there are more nodes to make
n->next = malloc(sizeof (struct node));
n = n->next;
} else {
n->next = NULL;
}
i++;
}
return head;
}

int main(int argc, char *argv[]) {
struct node *head = make_list(argc - 1, argv);
struct node *return_path = mountaineer(head);
printf("Given stopping points: ");
print_and_free_list(head);

printf("Return stopping points: ");
print_and_free_list(return_path);
return 0;

}

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-08-18 13:42
    关注

    十万个为什么么......
    国外老师这么狠啊
    先要找到最高点,然后向前遍历比他小的,再把下一个作为标杆,向前找比它小的

    struct node *mountaineer(struct node *head) {
           if(head == NULL)
            return NULL;
        struct node *r = NULL;
        struct node *p = head;
        struct node *q = head->next;
        unsigned long sH = p->height;
        unsigned long mH = 0xFFFFFFFF;
        while(q != NULL)
        {
            if(q->height < sH)
            {
                  p->next = q->next;
                  free(q);
                  q = p->next;
            }
            else if(q->height > sH && q->height < mH)
            {
                  mH = q->height;
                  r->next = q;
                  free(p);
                  p = r;
            }
            else
            {
                p->next = q->next;
            }
            r = p;
            p = q;
            q = q->next;
        }
        //
        p = head;
        q = p->next;
        p->next = NULL;
        while(q != NULL)
        {
            head = q;
            head->next = p;
            p = head;
            q = q->next;
        }
        return head;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月26日
  • 已采纳回答 8月18日
  • 创建了问题 8月18日

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题