# 学习笔记——C语言实现单链表的基本操作：创建、输出、插入结点、删除结点、逆序链表

***************************************************

***************************************************

#include <stdio.h>
#include <stdlib.h>

typedef struct Node
{
int data;
struct Node *next;
}Lnode;

Lnode *createList();

int main()
{
int elem,position;

printf("Input the element and the position:/n");
scanf("%d %d", &elem, &position);

printf("After reversed:/n");

printf("Input the element you want to delete:/n");
scanf("%d",&elem);

return 0;
}

/*传入表头指针，打印链表*/
{

if (p == NULL)
{
printf("List is empty!/n");
return;
}
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("/n");
}

/*创建一个新链表，返回表头指针*/
Lnode *createList()
{
int data;

printf("Input integers,0 to break:/n");
scanf("%d",&data);

if (data != -1)
{
p->data = data;
}
else
{
}

while (1)
{
scanf("%d", &data);
if (data == -1)
{
break;
}

current = (Lnode *)malloc(sizeof(Lnode));
current->data = data;
p->next = current;
p = p->next;
}
p->next = NULL;

}

*将elem插入至第position个结点后，position<=0时，插入至头结点后
*/
{
Lnode *current, *p;
int i = position - 1;

/*找到第position个节点*/
while (i > 0 && current->next != NULL)
{
current = current->next;
i--;
}

if (i > 0)   //结点数小于输入的位置position
{
printf("Position is wrong!/n");
}

p = (Lnode *)malloc(sizeof(Lnode));
p->data = elem;
p->next = current->next;
current->next = p;

}

{
Lnode *ptemp;
int flag = 0;  //记录便表中elem的个数

while (1)
{
{
flag++;
free(p);
}
else
{
break;
}
}

while (p->next != NULL)
{
if (p->next->data == elem )
{
flag++;
ptemp = p->next;
if (p->next->next != NULL)
{
p->next = p->next->next;
free(ptemp);
ptemp = NULL;
}
else //最后一个结点
{
free(ptemp);
ptemp =NULL;
p->next = NULL;
break;
}
}
else  //没有删除结点时，查询下一个结点
{
p = p->next;
}
}
printf("%d number '%d' was found and deleted./n", flag, elem);
}

/*将链表逆序，该链表不带头结点。*/
{
Lnode *current, *pnext, *ptemp;

while (pnext != NULL)
{
ptemp = pnext->next;
pnext->next = current;
current = pnext;
pnext = ptemp;
}

}

• 本文已收录于以下专栏：

## 链表的基本操作（C语言版）：建立，插入，删除，查找，输出

//1、链表的基本操作（不带头结点）//**的含义把握不准确，要认真研究练习 #include #include typedef struct list { int data; struc...
• xiaohuizi2009
• 2013年03月04日 12:44
• 5874

## C语言实现单链表的逆序打印（带头结点）

• CHENYUFENG1991
• 2016年03月01日 20:07
• 3460

## 单链表实现（C语言版，无头结点）

• gogogo_sky
• 2017年05月02日 02:42
• 787

## C语言实现单链表（带头结点）的基本操作

• CHENYUFENG1991
• 2016年03月01日 13:40
• 5518

## 实现无头结点单链表的基本操作函数

• Quinn0918
• 2017年06月09日 17:29
• 1051

## 【面试算法系列】逆序输出一个单链表 - C语言实现

• SolemnKyle
• 2015年09月08日 17:13
• 2337

## C语言单链表逆序

• qq411633267
• 2015年11月11日 12:09
• 1963

## C语言实现单链表逆序与逆序输出实例

• win_turn
• 2016年02月19日 00:24
• 4401

## 单链表的基本操作c语言实现

#include #define false 0 #define ok 1//定义节点的结构 typedef struct node{ int data; struct node *n...
• gongdileidechouzhu
• 2017年02月25日 16:14
• 818

## 单链表插入和删除结点c语言的实现

• mango_haoming
• 2017年03月10日 11:22
• 2007

举报原因： 您举报文章：学习笔记——C语言实现单链表的基本操作：创建、输出、插入结点、删除结点、逆序链表 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)