0
点赞
收藏
分享

微信扫一扫

链表插入操作


输入格式

第一行输入是一个整数 n(1≤n≤100),表示一共要执行 n 次插入操作。

接下来输入 n 行,每行输入两个整数 p 和 q(0≤p,q≤100),其中 p 表示结点插入链表中的位置(从下标为 0 开始),q 表示插入元素的值,两个整数之间用一个空格隔开,行末没有空格。

输出格式

输出一共 n+1 行。前 n 行对应每次插入操作,一行一个结果,如果一个元素成功插入到了链表中,请输出success,如果插入失败则输出failed。

第 n+1 行输出最后的链表,每两个整数之间用一个空格隔开,行末不需要多余的空格。

#include <stdio.h>
#include <stdlib.h>

typedef struct Node{
int data;
struct Node *next;
}Node, *LinkedList;

LinkedList insert(LinkedList head, Node *node, int index) {
if (head == NULL) {
if (index != 0) {
printf("failed\n");
return head;
}
head = node ;
printf("success\n");
return head;
}
if (index == 0) {
node->next = head;
head = node;
printf("success\n");
return head;
}
Node *current_node = head;
int count = 0;

while (current_node->next != NULL && count < index - 1) {
current_node = current_node->next;
count++;
}
if (current_node->next == NULL && count < index - 1){
printf("failed\n");
return head;
}
if (count == index - 1) {
printf("success\n");
node->next = current_node->next;
current_node->next = node;
}

return head;

}

void output(LinkedList head) {
if (head == NULL) {
return head;
}
Node *current_node = head;
while (current_node != NULL) {
if(current_node != head) printf(" ");
printf("%d",current_node->data);
current_node = current_node->next;
}
printf("\n");
}

void clear(LinkedList head) {
Node *current_node = head;
while (current_node != NULL ) {
Node *delete_node = current_node;
current_node = current_node->next;
free(delete_node);
}
}

int main() {
LinkedList linkedlist = NULL;
int n;
int p,q;
scanf("%d",&n);
for (int i = 0; i < n; i++) {
scanf("%d %d",&p,&q);
Node *node = (Node *)malloc(sizeof(Node));
node->data = q;
node->next = NULL;
linkedlist = insert(linkedlist,node,p);
}

output(linkedlist);
clear(linkedlist);
return 0;
}


举报

相关推荐

0 条评论