输入了一个长度为 n 的数组,把这个数组转换成链表并在第 i 个节点的后面添加一个值为 i 的新节点
输入描述:
第一行输入两个正整数分别是 n 和 i ,表示数组的长度、需要添加节点的位置和节点的值
第二行输入 n 个正整数表示数组中每个元素的值。
输出描述:
把数组转换成链表并在第 i 个节点后的添加一个新节点值,新节点的值是 i。
输入:
5 3
5 4 8 6 3
输出:
5 4 8 3 6 3
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode
{
int data;
struct ListNode* next;
}ListNode;
ListNode * creat_list(int arr[],int n)
{
ListNode *head=(ListNode*)malloc(sizeof(ListNode));
head->data=arr[0];
head->next=NULL;
ListNode *p=head;
for (int i=1;i<n;i++) {
ListNode *s=(ListNode*)malloc(sizeof(ListNode));
s->data=arr[i];
s->next=NULL;
p->next=s;
p=p->next;
}
return head;
}
void show_list(ListNode *head)
{
ListNode *p=head;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
void insert_list(ListNode*head,int x)
{
ListNode*s=(ListNode*)malloc(sizeof(ListNode));
s->data=x;
s->next=NULL;
ListNode* pre=head;
while(--x>0)
{
pre=pre->next;
}
s->next=pre->next;
pre->next=s;
}
int main() {
int n,x;
scanf("%d %d",&n,&x);
int arr[n];
for(int i=0;i<n;i++)
{
scanf("%d ",&arr[i]);
}
ListNode *head=creat_list(arr,n);
insert_list(head,x);
show_list(head);
return 0;
}