C语言实现线性表逆置:顺序表和单链表两种方法

设有一线性表 e=(e1 , e2 , … , en-1 , en),其逆线性表定义为 e'=( en , en-1 , … , e2 , e1),本文将设计算法实现线性表逆置,要求逆线性表仍占用原线性表的空间。我们将使用顺序表和单链表两种方法来表示线性表,并分别提供对应的处理函数。

顺序表方法

对于顺序表的处理函数,可以使用两个指针,一个指向线性表的头部,另一个指向线性表的尾部,然后交换头部和尾部的元素,依次向中间移动指针,直到两个指针相遇。

void reverseList(SeqList* list) {
    int i, temp;
    for(i=0; i<list->length/2; i++) {
        temp = list->data[i];
        list->data[i] = list->data[list->length-1-i];
        list->data[list->length-1-i] = temp;
    }
}

单链表方法

对于单链表的处理函数,可以使用三个指针,分别指向当前节点、前一个节点和后一个节点。遍历链表,将当前节点的指针指向前一个节点,然后向后移动三个指针,直到当前节点为空。

void reverseList(LinkedList* list) {
    Node *cur, *prev, *next;
    if(list->head == NULL || list->head->next == NULL) {
        return;
    }
    cur = list->head;
    prev = NULL;
    while(cur != NULL) {
        next = cur->next;
        cur->next = prev;
        prev = cur;
        cur = next;
    }
    list->head = prev;
}

注意,以上代码只实现了逆置函数,需要在主函数中调用该函数来逆置线性表。

C语言实现线性表逆置:顺序表和单链表两种方法

原文地址: https://www.cveoy.top/t/topic/ph6B 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录