题解 | 牛牛的链表添加节点
牛牛的链表添加节点
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;
#刷题#