单链表基本操作(C语言版)

7-1 单链表基本操作

分数 45

作者 朱允刚

单位 吉林大学

请编写程序实现单链表插入、删除结点等基本算法。给定一个单链表和一系列插入、删除结点的操作序列,输出实施上述操作后的链表。单链表数据域值为整数。

输入格式:

输入第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

栈限制

8192 KB

#include
#include
typedef struct node{
    int sj;
    struct node *next;
}node;
int main()
{
	node *p,*q,*head;
	head=(node *)malloc(sizeof(node));
	head->next=NULL;
	q=head;
	int n;
	scanf("%d",&n);
	for(int i=0;isj);
		p->next=NULL;
		q->next=p;
		q=q->next;
	}
	int m;
	scanf("%d",&m);
	int x,k,d;
	for(int i=0;in+1){
				return 0;
			}
			else{
				for(int i=1;i<=k-1;i++){
					h=h->next;
				}
				p=(node *)malloc(sizeof(node));
				p->sj=d;
				p->next=h->next;
				h->next=p;
				n++;
			}
		}
		else if(x==1){
			scanf("%d",&k);
			if(k<=0||k>n+1){
				return 0;
			}
			else{
				for(int i=1;i<=k-1;i++){
					h=h->next;
				}
				p=h->next;
				h->next=p->next;
				n--;
			}
		}
	}
	node *l=head->next;
	for(int i=0;isj);
		l=l->next;
	}
	return 0;
}

你可能感兴趣的:(数据结构,数据结构pta,c语言,开发语言,数据结构,算法,链表)