美文网首页人民广场
单链表就地转置

单链表就地转置

作者: 徐凯_xp | 来源:发表于2021-04-29 15:18 被阅读0次

试写一道算法,实现单链表的就地逆置(反转),即利用原表的存储空间将线性表(a1,a2,⋯an)逆置(反转)为(an⋯ ,a2,a1)。
输入格式

输入共有两行,第一行为线性表长度 n(0≤n≤26)。

第二行共有 n 个大写字母,为顺序输入的线性表的元素,每两个大写字母之间一个空格。
输出格式

输出只有一行,为逆置后的线性表元素的顺序输出。每两个大写字母之间一个空格,最后一个大写字母后面没有空格。
这里需要注意的是,输入数据的时候利用 \n 空格 吃掉输入的格式

#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
    char data;
    struct Node *next;
}Node, *LinkedList;

LinkedList insert(LinkedList head, Node *node, int index){
    if(head == NULL){
        if(index != 0){
            return head;
        }
    }
    if(index == 0){
        node->next = head;
        head = node;
        return head;
    }
    Node *current_node = head;
    int count = 0;
    while(current_node->next != NULL && count < index -1){
        current_node = current_node->next;
        count++;
    }
    if(count == index -1){
        node->next = current_node->next;
        current_node->next = node;
    }
    return head;
}
LinkedList reverse(LinkedList head){
    if(head == NULL){
        return head;
    }
    Node *current_node, *next_node;
    current_node = head->next;
    head->next = NULL;
    while(current_node != NULL){
        next_node = current_node->next;
        current_node->next = head;
        head = current_node;
        current_node = next_node;
        
    }
    return head; 
}
void output(LinkedList head){
    if(head == NULL){
        return;
    }
    Node *current_node = head;
    while(current_node != NULL){
        
        if(current_node != head){
           printf(" ");
        }
        printf("%c",current_node->data);
        current_node = current_node->next;
    }
}



int main(){
    int n;
    scanf("%d\n", &n);
    LinkedList linkedlist = NULL;
    for(int i = 0; i < n; i++){
        Node *node = (Node *)malloc(sizeof(Node));
        scanf("%c ", &node->data);
        //printf("%c\n",node->data);
        node->next = NULL;
        linkedlist = insert(linkedlist, node, i);
    }
    linkedlist = reverse(linkedlist);
    output(linkedlist);
    return 0;
}

相关文章

  • 单链表就地转置

    试写一道算法,实现单链表的就地逆置(反转),即利用原表的存储空间将线性表(a1,a2,⋯an)逆置(反转)为(an...

  • 算法面试:链表转置

    //单链表定义 普通的循环的方法。 //单链表逆置实现 递归调用方法

  • 44_递归的思想与应用(中)

    关键词:单链表的转置、单向排序链表的合并、汉诺塔问题、全排列问题 0. 单链表的转置 1. 单向排序链表的合并 2...

  • 插入任意数据形成有序单链表并逆置单链表

    可直接运行的完整C语言版有序单链表的生成和逆置标签:数据结构、线性表、带头结点的单链表、逆置单链表欢迎与喜欢数据结...

  • 线性表之单链表实现

    线性表之单链表实现 实现单链表的初始化、插入、删除等基本运算 实现单链表的输入、输出运算 实现单链表的逆置、归并、...

  • 单链表逆置

    单链表逆置的思路 a:将单链表储存为数组,然后按照数组的索引逆序进行反转。b:使用3个指针遍历单链表,逐个链接点进...

  • 单链表翻转

    单链表的就地逆置:就地逆置即空间复杂度为O(1)一:用数组存储单链表的值,然后重新逆序赋值,效率较低。二:利用三个...

  • 单链表的逆置

    方法一:迭代逆置 在上一篇文章的基础上添加Reverse()方法。 方法二:递归逆置

  • 单链表逆置算法详解

    思路: 首先创建一个单链表,返回一个头节点的指针( head 该头节点不为 NULL,其次进行单链表的逆置设置。具...

  • 42.单链表逆置

网友评论

    本文标题:单链表就地转置

    本文链接:https://www.haomeiwen.com/subject/krrwrltx.html