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(',',''))

供参考:

#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