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

//定义一个结点,可视为链表的最小单元,包括两要素:指针域和数据域
typedef struct Node
{
    struct Node *link;
    int num;
} node,*pNode;

pNode Del_Node(pNode pHead,int back);
node * creat(int n) /*建立单链表,n为链表中结点的个数*/
{
    node *pTail = NULL,*pHead = NULL,*pNew = NULL; 
//为了记住链表的起始地址,设置根指针*pHead保存表头结点的指针
//头指针指向链表的第1个节点,他只是一个指针,不包含任何数据
//*pTail尾节点,*pNew新结点
    int i; 
 
//线性表初始化,设置头结点,并使尾结点指向头结点
    if((pHead = (node *)malloc(sizeof(node)))==NULL) /*分配新存储空间并检测,一个结点*/
    {
            printf("不能分配内存空间!");
            exit(0);
    }
 
    pHead->num=0; /*把表头结点的数据域置空*/
    pHead->link=NULL; /*把表头结点的链域置空,此时还未插入任何数据*/
    pTail=pHead; /*pTail指向表头结点*/

//插入结点的步骤:
//1.生成新的结点,注意新结点的link指向NULL;
//2.将新结点添加到表尾;
//3.设置新的表尾
    for(i=1;i<=n;i++)//插入n个节点
    {
        if((pNew = (node *)malloc(sizeof(node)))==NULL) /*分配新存储空间并检测*/
        {
            printf("不能分配内存空间!");
            exit(0);
        } 
		
		pNew->num = i;
//实现循环链表
		if(i < n)
		{
			pNew->link=NULL;
		}
		else
		{
			pNew->link=pHead->link;//注意头结点没有数据
		}
		pTail->link=pNew; //新结点插到表尾
		pTail=pNew;//设置新的表尾
    }
    return pHead;
}
 
void output(node *p)
{
	int i=0;
    for(i=0;i<20;i++)
	{
		printf("%d ",p->num);
        p= p->link;
	}      
}
 
int main()
{
    pNode p,tmp;
    p = creat(10)->link;//返回值为头指针

	Del_Node(p,3);		
	output(p);
	while(1);
    return 0;
}

//删除单个结点
pNode Del_Node(pNode pHead,int back)
{
    int i = 1;
    pNode _node = pHead;
    pNode pTmp;
    if ((back < 1) && (NULL == _node->link))	//非空链表
    {
        printf("删除失败!\n");
        return 0;
    }


    while(i < back-1)	//找到待删除结点的前一个结点
    {
		_node = _node->link;
        ++i;
    }

    pTmp = _node->link;	
    _node->link = _node->link->link;
    free(pTmp);	//删除结点
    return _node; 
}


点赞(1)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 2 条评论

7年前 回复TA

谢谢

验题君 7年前 回复TA

进步很大啊