题解 | 牛牛的链表添加节点
牛牛的链表添加节点
https://www.nowcoder.com/practice/e33b79c2e15a41f9b541e73cd256124a
#include <stdio.h>
#include <stdlib.h>
// write your code here......
//创建结构体
typedef struct Node
{
int data;
struct Node* next;
}Node;
//将数组转化为链表
Node* createList(int* arr,int n)
{
Node* head = NULL;
Node* tail = NULL;
if(n==0)
{
return NULL;
}
for(int i=0;i<n;i++)
{
Node* newnode =(Node*)malloc(sizeof(Node));
newnode->data =arr[i];
newnode->next =NULL;
if(head==NULL)
{
head = newnode;
tail = newnode;
} else
{
tail->next=newnode;
tail=newnode;
}
}
return head;
}
//打印最终链表
void printlist(Node* head)
{
Node* current = head;
if(current==NULL)
{
printf("list is empty");
}
while(current!=NULL)
{
printf("%d",current->data);
if(current->next !=NULL)
{
printf(" ");
}
current = current->next;
}
printf("\n");
}
//shifangleicui
void freeList(Node* head)
{
Node* current = head;
Node* temp;
while(current!= NULL)
{
temp = current;
current = current->next;
free(temp);
}
}
int main() {
int n,idx;
scanf("%d%d",&n,&idx);
int* arr=(int*)malloc(n*sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d",&arr[i]);
}
// write your code here......
Node* head = createList(arr,n);
Node* current = head;
for(int j=1;j<idx;j++)
{
current = current->next;
}
//create newnode
Node* newnode = (Node*)malloc(sizeof(Node));
newnode->data = idx;//newnode value is i
newnode ->next = current->next;//newnode point out next point
current->next = newnode;
printlist(head);
free(arr);
freeList(head);
return 0;
}
1.通过循环找到了第 i 个节点的位置 2.创建新节点并插入 3. 打印最终结果
创建新节点插入:Node* newnode = (Node*)malloc(sizeof(Node)); Node* current = head; newnode->data = idx ; newnode->next =current->next ; current->next = newnode;
#刷题#