2301_79683887 2023-09-16 11:11 采纳率: 70.6%
浏览 19
已结题

老是运行超时,怎么办啊

请编写程序实现单链表插入、删除结点等基本算法。给定一个单链表和一系列插入、删除结点的操作序列,输出实施上述操作后的链表。单链表数据域值为整数。
输入格式:
输入第1行为1个正整数n,表示当前单链表长度;第2行为n个空格间隔的整数,为该链表n个元素的数据域值。第3行为1个正整数m,表示对该链表施加的操作数量;接下来m行,每行表示一个操作,为2个或3个整数,格式为0 k d或1 k。0 k d表示在链表第k个结点后插入一个数据域值为d的结点,若k=0则表示表头插入。1 k表示删除链表中第k个结点,此时k不能为0。注:操作序列中若含有不合法的操作(如在长度为5的链表中删除第8个结点、删除第0个结点等),则忽略该操作。n和m不超过100000。
输出格式:
输出为一行整数,表示实施上述m个操作后的链表,每个整数后一个空格。输入数据保证结果链表不空。
输入样例:
5
1 2 3 4 5
5
0 2 8
0 9 6
0 0 7
1 0
1 6
输出样例:
7 1 2 8 3 5

代码长度限制
16 KB
Python (python3)
时间限制
1000 ms
内存限制
256 MB
Java (javac)
时间限制
5000 ms
内存限制
256 MB
其他编译器
时间限制
100 ms
内存限制
10 MB

#include <stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct Node{
    int data;
    struct Node *next;
}LinkListNode;

LinkListNode* Createlist(int n)//创建链表
{
    LinkListNode *head,*p,*q;
    head = (LinkListNode*)malloc(sizeof(LinkListNode));
    head->data = 1;
    head->next = NULL;
    p = head;
    for(int i = 2;i <= n;i++)//从头结点开始依此赋值
    {
        q = (LinkListNode*)malloc(sizeof(LinkListNode));
        q->data = i;
        p->next = q;
        p = q;
    }
    p->next = head;//最后指向头结点,构成循环
    return head;
}
int main()
{
    int n,p;
   scanf("%d%d",&n,&p);
    int ret[n];
    int i = 0;
    LinkListNode *head,*ptr,*q;
    head = Createlist(n);
    ptr = head;
    while(i<n)
    {
        for(int j = 1;j < (p-1);j++)
        {
            ptr = ptr->next;
        }
        q = ptr->next;
        ret[i] = q->data;
        ptr->next = q->next;
        free(q);
        ptr = ptr->next;
        i++;
    }
    for(int j = 0;j<n-1;j++)
    {
        printf("%d ",ret[j]);
    }
       printf("%d", ret[n - 1]);
    return 0;
}

img

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-09-17 11:49
    关注

    整体实现如下,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    typedef int DataType;
    typedef struct Lnode
    {
        DataType    data;
        struct Lnode* next;
    }ListNode, Node, * LinkList;
    
    LinkList CreateList(int n)
    {
        DataType  i;
        LinkList  qt = NULL, head = NULL, ph = NULL;
        head = (LinkList)malloc(sizeof(ListNode));
        if (!head)
            return NULL;
        head->next = NULL;
        ph = head;
        for (i = 0; i < n; i++)
        {
            qt = (ListNode*)malloc(sizeof(ListNode));
            if (!qt)   break;
            qt->next = NULL;
            scanf("%d", &qt->data);
            ph->next = qt;
            ph = qt;
        }
        return head;
    }
    void InsList(LinkList head, int i, DataType x)
    {
        ListNode* p = head, * s = NULL;
        if (!head)  return;
        if (i > 0)  while (p->next && i--)  p = p->next;
        if (i >= 1) return;
        s = (ListNode*)malloc(sizeof(ListNode));
        if (!s)  return;
        s->next = NULL;
        s->data = x;
        s->next = p->next;
        p->next = s;
    }
    void DelList(LinkList head, int i)
    {
        ListNode* p = head, * s = NULL;
        if (i < 1 || !head || !head->next)
            return;
        while (p->next && --i)  p = p->next;
        if (!p->next)
            return;
        s = p->next;
        p->next = s->next;
        free(s);
    }
    void PrintList(LinkList head)
    {
        ListNode* p = NULL;
        if (!head || !head->next)
            printf("NULL");
        else {
            p = head->next;
            while (p != NULL)
            {
                printf(p == head->next ? "%d" : " %d", p->data);
                p = p->next;
            }
        }
        printf("\n");
    }
    int main()
    {
        DataType n, m, k, d, x;
        LinkList L = NULL;
     
        scanf("%d", &n);
        L = CreateList(n);
        scanf("%d", &m);
        while (m--) {
            scanf("%d", &x);
            switch (x)
            {
            case 0:scanf("%d %d", &k, &d);
                   InsList(L, k, d);
                   break;
            case 1:scanf("%d", &k);
                   DelList(L, k);
                   break;
            default:
                break;
            }
        }
        PrintList(L);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月25日
  • 已采纳回答 9月17日
  • 创建了问题 9月16日