略懂c语言 2022-05-23 17:47 采纳率: 92.6%
浏览 39
已结题

python改为c语言之创建两个链表

img

N = int(input(""))
L = []
for i in range(N):
    inpi = int(input(""))
    L.append(inpi)
 
for i in L:
    str1 = str(i)
    L1 = []
    L2 = []
    for i in range(0, len(str1), 2):
        L1.insert(0, str1[i])
    for i in range(1, len(str1), 2):
        L2.append(str1[i])
        
    print(str(L1).replace('[','').replace(']','').replace('\'','').replace(',',''))
    print(str(L2).replace('[','').replace(']','').replace('\'','').replace(',',''))

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-05-23 21:34
    关注

    供参考:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Node {// 链表节点结构
        char   data;
        struct Node* next;
    }LinkNode, * LinkList;
    
    void destroyNodes(LinkList L)
    {
        LinkNode *pL = NULL;
        while(L){
            pL = L;
            L = pL->next;
            free(pL);
        }
    }
    void show(LinkList L)//输出单链表
    {
        if (L == NULL || L->next == NULL) return;
        LinkNode* p = L->next;
        while (p) {
            printf(p == L->next ? "%c":" %c", p->data);
            p = p->next;
        }
        printf("\n");
    }
    
    void Split(LinkList* L1, LinkList* L2)//链表拆分
    {
        (*L2) = (LinkNode*)malloc(sizeof(LinkNode));
        (*L2)->next = NULL;
        LinkNode *pL1,*prL1,*pL;
        pL1  = (*L1)->next;
        prL1 = (*L1);
        int count = 0;
        while(pL1 != NULL){
            count++;
            pL = pL1;
            pL1 = pL1->next;
            pL->next = NULL;
            if(count%2==0){
                prL1->next = pL; //偶数位置元素尾插
                prL1 = pL;
            }else{
                pL->next = (*L2)->next;//奇数位置元素头插
                (*L2)->next = pL;
            }
        }
    }
    
    void createListFromHead(LinkList* L)// 创建链表
    {
        char   ch;
        (*L) = (LinkNode*)malloc(sizeof(LinkNode));
        (*L)->data = -1;
        (*L)->next = NULL;
        LinkNode* pL = (*L);
        while (scanf("%c", &ch) == 1 && ch != '\n')// 生成链表
        {
            LinkNode* p = (LinkNode*)malloc(sizeof(LinkNode));
            p->next = NULL;
            p->data = ch;
            pL->next = p;
            pL = p;
        }
    }
    
    int main()
    {
        int m;
        scanf("%d", &m);
        getchar();
        while (m--)
        {
             LinkList L = NULL,L1 = NULL;
             createListFromHead(&L);//创建链表 L
             //show(L);
             Split(&L, &L1);//拆分链表,按奇偶位置
             show(L1);
             show(L);
             destroyNodes(L); //释放链表
             destroyNodes(L1);
        }
        return 0;
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月31日
  • 已采纳回答 5月23日
  • 创建了问题 5月23日

悬赏问题

  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 three.js添加后处理以后模型锯齿化严重