题解 | #牛牛的链表添加节点#
牛牛的链表添加节点
https://www.nowcoder.com/practice/e33b79c2e15a41f9b541e73cd256124a
#include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *next; }node; node *createlist(){ node *head = malloc(sizeof(node)); if (head == NULL) { printf("out of memory"); exit(1); } head->next = NULL; return head; } void add_node(node *head, int n, int *p) { node *cur = head; //声明一个尾指针跟踪插入新节点 for (int i = 0; i < n; i++) { node *newnode = malloc(sizeof(node)); if (newnode == NULL) { printf("out of memory"); exit(1); } newnode->data = p[i]; newnode->next = NULL; cur->next = newnode; cur = newnode; //尾指针跟踪尾节点 } } void insertnode(node *head, int i) { node *q = head->next; //声明一个流指针 for (int j = 1; j < i; j++) { //找到第i个节点 q = q->next; //虽然循环到j-1就不能再进入循环,但是它已经指向了下一个节点就是第i个节点 } //现在q指向第i个节点 node *insertnode = malloc(sizeof(node)); if (insertnode == NULL) { printf("out of memory"); exit(1); } insertnode->data = i; //给要插入的节点赋值 insertnode->next = q->next; //进行插入 q->next = insertnode; } int main() { int n, x; scanf("%d %d", &n, &x); int arr[n]; for(int i = 0; i < n; i++) { scanf("%d", &arr[i]); } node *head = createlist(); add_node(head,n, arr); insertnode(head,x); node *cur = head->next; while (cur != NULL) { printf("%d ", cur->data); cur = cur->next; } return 0; }