题目:连接两个链表。

程序分析:首先创建两个链表,然后遍历第一个链表找到最后一个节点,将其指针指向第二个链表的头节点,从而实现链表的连接。

实例

#include <stdlib.h>
#include <stdio.h>

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

typedef struct list node;
typedef node *link;

link delete_node(link pointer, link tmp) {
    if (tmp == NULL) /*delete first node*/
        return pointer->next;
    else {
        if (tmp->next->next == NULL)/*delete last node*/
            tmp->next = NULL;
        else /*delete the other node*/
            tmp->next = tmp->next->next;
        return pointer;
    }
}

void selection_sort(link pointer, int num) {
    link tmp, btmp;
    int i, min;
    for (i = 0; i < num; i++) {
        tmp = pointer;
        min = tmp->data;
        btmp = NULL;
        while (tmp->next) {
            if (min > tmp->next->data) {
                min = tmp->next->data;
                btmp = tmp;
            }
            tmp = tmp->next;
        }
        printf("\40: %d\n", min);
        pointer = delete_node(pointer, btmp);
    }
}

link create_list(int array[], int num) {
    link tmp1, tmp2, pointer;
    int i;
    pointer = (link)malloc(sizeof(node));
    pointer->data = array[0];
    tmp1 = pointer;
    for (i = 1; i < num; i++) {
        tmp2 = (link)malloc(sizeof(node));
        tmp2->next = NULL;
        tmp2->data = array[i];
        tmp1->next = tmp2;
        tmp1 = tmp1->next;
    }
    return pointer;
}

link concatenate(link pointer1, link pointer2) {
    link tmp;
    tmp = pointer1;
    while (tmp->next)
        tmp = tmp->next;
    tmp->next = pointer2;
    return pointer1;
}

int main(void) {
    int arr1[] = {3, 12, 8, 9, 11};
    int arr2[] = {5, 15, 6, 10, 7};
    link ptr1, ptr2, result;
    ptr1 = create_list(arr1, 5);
    ptr2 = create_list(arr2, 5);
    result = concatenate(ptr1, ptr2);
    selection_sort(result, 10);
    return 0;
}

在上述代码中,我们定义了一个结构体 list,用于表示链表的节点,包括一个整型数据 data 和一个指向下一个节点的指针 next

然后,我们定义了一个 delete_node() 函数,用于删除链表中的节点。根据传入的节点指针 tmp,判断需要删除的节点是链表的第一个节点、最后一个节点还是其他节点,然后进行相应的操作。

接下来,我们定义了一个 selection_sort() 函数,该函数用于对链表进行选择排序。遍历链表,找到当前节点后面最小的节点,将其值输出,并调用 delete_node() 函数删除该节点。

然后,我们定义了一个 create_list() 函数,用于创建链表。根据传入的数组 array 和节点个数 num,创建相应个数的节点,并按照数组的顺序连接这些节点,最终返回链表的头节点。

接着,我们定义了一个 concatenate() 函数,该函数用于连接两个链表。遍历第一个链表,找到最后一个节点,将其指针指向第二个链表的头节点,从而实现链表的连接。

main() 函数中,我们首先创建两个链表 ptr1ptr2,分别使用 create_list() 函数创建。然后,调用 concatenate() 函数将两个链表连接起来,并将连接后的链表保存在 result 变量中。

最后,我们调用 selection_sort() 函数对连接后的链表进行选择排序,并输出排序结果。

最后,程序通过返回 0 来结束程序的执行。

标签: c语言, c语言教程, c语言技术, c语言学习, c语言学习教程, c语言下载, c语言开发, c语言入门教程, c语言进阶教程, c语言高级教程, c语言面试题, c语言笔试题, c语言编程思想, c语言练习, c语言练习题