【计蒜课】【数据结构】【链表的创建、插入、遍历操作的复习】

#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 (count == index - 1) {
node->next = current_node->next;
current_node->next = node;
printf("success\n");
}
if(count != index-1){
printf("failed\n");
}

return head;
}

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

}

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;
scanf("%d",&n);
while(n>=1 && n<=100){
int p;
int q;
scanf("%d %d",&p,&q);
Node *node=(Node*)malloc(sizeof(Node));
node->data=q;
node->next=NULL;
linkedlist=insert(linkedlist,node,p);
n--;
}
output(linkedlist);
clear(linkedlist);
return 0;
}

原文地址:https://www.cnblogs.com/P201821430045/p/11829166.html

时间: 2024-10-31 23:21:02

【计蒜课】【数据结构】【链表的创建、插入、遍历操作的复习】的相关文章

[数据结构】【c语言】链表的创建和遍历

第一次写代码的博客,一个刚刚接触的新手,来这里主要是为了记录自己,方便自己以后浏览,也欢迎大家指正.先来个简单的,动态链表的创建和遍历. #include<stdio.h> #include<stdlib.h> #include<malloc.h> //定义链表的节点 typedef struct LNode { int data; struct LNode *next; } *LinkList; //创建链表函数 LinkList CreateList() { Lin

Java实现二叉树的创建和遍历操作(有更新)

博主强烈建议跳过分割线前面的部分,直接看下文更新的那些即可. 最近在学习二叉树的相关知识,一开始真的是毫无头绪.本来学的是C++二叉树,但苦于编译器老是出故障,于是就转用Java来实现二叉树的操作.但是二者原理是一致的,而且实现的方式也是大同小异! 下面就让我们来看看代码吧. 1.首先我们需要创建一个二叉树的节点类,便于我们对树的操作,当然了,你也可以在二叉树类的内部将节点类声明为内部类,但是这样会降低操作的灵活性.我才用的是单独创建一个BinaryTreeNode类,代码如下: package

计蒜课_二分法求平方根

教训:代码一直通不过的也许因为数据类型(在本题中int改为long),而不是逻辑问题: 代码如下: 1 #include<iostream> 2 using std::endl; 3 using std::cout; 4 using std::cin; 5 inline bool isRes(long x,long y){//判断 x是否为y的平方根: 6 return (x*x==y)||((x*x<y)&&((x+1)*(x+1)>y)); 7 } 8 int

计蒜课/ 微软大楼设计方案/中等(xjb)

题目链接:https://nanti.jisuanke.com/t/15772 题意:中文题诶- 思路:对于坐标为p1(x1, y1), p2(x2, y2) 的两个核心, 其中 x1 <= x2 用 d(p1, p2) 表示两者间最矮的大楼,则需要时间为: 对于d(p1, p2) >= min(y1, y2)情况,cnt = abs(x2 - x1) + abs(y2 - y1) 对于d(p1, p2) < min(y1, y2)情况,cnt = y1 + y2 - 2*d(p1, p

计蒜课_加一

使用数组的来表示一个较大的数: 1 #include<iostream> 2 using namespace std; 3 void add(int* &a, int length) { 4 int c = 1; 5 //c代表进位,完成对数组的更新,并保留最高为的进位: 6 for (int i = length - 1;i >= 0;i--) { 7 if ((a[i] += c) == 10) { 8 c = 1; 9 a[i] = 0; 10 } 11 else { 12

计蒜课 光合作用 百度之星2012.12.23题目1

链接:https://nanti.jisuanke.com/t/38 du熊是个爱学习的孩子,他总喜欢在生活中做一些小实验,这次du熊想研究一下光合作用. du熊的实验材料有如下几样:神奇的种子,普通的纸箱和一些光源.一开始du熊将种子均匀的种在了箱子底部,你可以将其看成X轴,种子的位置为X轴上的点.然后du熊用纸板将箱子盖住,并在纸板上安装了一些光源(具体见图).神奇的种子会在有光的情况下一直向上生长直到没光为止.现在du熊想知道当实验结束时每颗种子的高度是多少? 顶上的为光源,光源两边与顶部

联想专卖店大促销(计蒜课)

题目链接:传送门 题目大意:略 题目思路:其实问了学长才会做这个题,准确说细节处理都没问题,主要是方向没对(说了跟没说一样),这个题目我们观察数据有1e5组测例,单组测例的单个数据最大1e5 限时1s,所以时间复杂度要求很高.其实有想过二分这种思想但是不知道怎么二分. 我们观察三种礼包,每种礼包其实都可以拆成两部分(1个U盘1个鼠标+X)那么我们可以想到将每件礼品都拆为两部分,然后我们对于U盘和鼠标的数目进行二分, 也就是二分答案.而判断二分值是否合理的依据是我们枚举的U盘和鼠标数<=X的数目.

计蒜课/百度的年会游戏(枚举)

题目链接:https://nanti.jisuanke.com/t/15503 题意:中文题诶- 思路:一开始想写的直接模拟gg了,赛后才想到这里可以直接枚举两个色子的点数,再来判断一下当前情况是否可行就好了... 代码: 1 #include <iostream> 2 using namespace std; 3 4 int a[5], x, y; 5 6 void yxl(int& fx, int& cnt){ 7 while(a[cnt] < fx){ 8 fx -

计蒜课/UCloud 的安全秘钥(hash)

题目链接:https://nanti.jisuanke.com/t/15768 题意:中文题诶- 思路:直接hash就好了,当时zz了没想到... 代码: 1 #include <iostream> 2 #include <stdio.h> 3 #define ll long long 4 using namespace std; 5 6 const int MAXN = 1e5; 7 ll a[MAXN] = {1}; 8 ll w[MAXN]; 9 10 int main(vo