c语言,补全一下我的这个代码,在put your code here添加代码,其他的不用改

问题描述:

Compare给出了两个参数head1和head2,它们是指向链表第一个节点的指针。
如果第一个列表比第二个列表短,Compare应该返回-1
如果两个列表长度相同,Compare应该返回0
如果第一个列表比第二个列表长,Compare应该返回1
img
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

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

// compare should return -1 if head1 is a shorter list than head2
// compare should return 1 if head1 is a longer list than head2
// compare should return 0 if head1 is the same length as head2
int compare(struct node *head1, struct node *head2) {

// PUT YOUR CODE HERE (change the next line!)
return 42;

}
struct node *strings_to_list(int len, char *strings[]);

// DO NOT CHANGE THIS MAIN FUNCTION
int main(int argc, char *argv[]) {
// create two linked lists from command line arguments
int dash_arg = argc - 1;
while (dash_arg > 0 && strcmp(argv[dash_arg], "-") != 0) {
dash_arg = dash_arg - 1;
}
struct node *head1 = strings_to_list(dash_arg - 1, &argv[1]);
struct node *head2 = strings_to_list(argc - dash_arg - 1, &argv[dash_arg + 1]);

int result = compare(head1, head2);
printf("%d\n", result);

return 0;

}

// DO NOT CHANGE THIS FUNCTION
// create linked list from array of strings
struct node *strings_to_list(int len, char *strings[]) {
struct node *head = NULL;
for (int i = len - 1; i >= 0; i = i - 1) {
struct node *n = malloc(sizeof (struct node));
assert(n != NULL);
n->next = head;
n->data = atoi(strings[i]);
head = n;
}
return head;
}

哦,又来问题啦,让我看看先

int compare(struct node *head1, struct node *head2) {
    while(head1 != NULL && head2 != NULL)
    {
          head1 = head1->next;
          head2 = head2->next;
    }
    if(head1 == NULL && head2 == NULL)
        return 0;
    if(head1 == NULL && head2 != NULL)
        return -1;
    return 1;
}