前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >链表——新建链表

链表——新建链表

作者头像
用户4645519
发布2020-09-07 11:07:49
1.2K0
发布2020-09-07 11:07:49
举报
文章被收录于专栏:嵌入式学习嵌入式学习
代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct node
{
    int data;
    struct node *pNext;
};

//新建node
struct node * create_node(int data)
{
    struct node *p = (struct node *) malloc (sizeof(struct node));
	
    if(NULL == p)
    {
        printf("malloc error!.\n");
        return NULL;
    }
    memset(p, 0, sizeof(struct node));
    p->data = data;
    p->pNext = NULL;

    return p;
}

void insert_tail(struct node *pH, struct node *newp)
{
    struct node * p = pH;
    while(NULL != p->pNext)
    {
        p = p->pNext;
    }
    p->pNext = newp;
}

void insert_head(struct node * pH, struct node *newp)
{
    newp->pNext = pH->pNext;
    pH->pNext = newp;
}

//excluding header data
void list_for_each_1(struct node *pH)
{
    struct node *p = pH->pNext;
    printf("------------begin------------\n");
    while(NULL != p->pNext)
    {
        printf("node data : %d.\n", p->data);
        p = p->pNext;
    }
    printf("node data : %d.\n", p->data);
    printf("------------end------------\n");
}

//excluding header data version 2 simplify
void list_for_each_3(struct node *pH)
{
    struct node *p = pH;
    printf("------------begin------------\n");
    while(NULL != p->pNext)
    {
        p = p->pNext;
        printf("node data : %d.\n", p->data);
    }
    printf("------------end------------\n");
}

//including header data
int list_for_each_2(struct node *pH)
{
    struct node *p = pH;
    printf("------------begin------------\n");
    if(NULL == p)
    {
    	printf("nothing.\n");
    	return -1;
	}
    while(NULL != p->pNext)
    {
        printf("node data : %d.\n", p->data);
        p = p->pNext;
    }
    printf("node data : %d.\n", p->data);
    printf("------------end------------\n");
    return 0;
}

//can not delete header node data
int delete_node(struct node * pH, int data)
{
    struct node *p = pH;
    struct node *pPrev = NULL;
    while(NULL != p->pNext)
    {
        pPrev = p;
        p = p->pNext;
        if(p->data == data)
        {
            if(NULL == p->pNext)
            {
                pPrev->pNext = NULL;
                free(p);
            }
            else
            {
                pPrev->pNext = p->pNext;
                free(p);
            }
			return 0;
        }
    }
    printf("no node deleted.\n");
    return -1;
}

//can delete all node including the tail node and header node
struct node * delete_node_2(struct node * pH, int data)
{
    struct node *p = pH;
    struct node *pPrev = NULL;
	pPrev = p;
    while(NULL != p) //traserval to tail
    {
		if(p->data == data)
		{
			//delete header node
			if(p->data == pH->data)
			{
				pH = p->pNext;
				free(p);
				printf("node %d deleted ok.\n",data);
				return pH; //delete ok!
			}
			else
			{
				//delete tail node
				if(NULL == p->pNext)
				{
					pPrev->pNext = NULL;
					free(p);
				}
				else
				{
					pPrev->pNext = p->pNext;
					free(p);
				}
				printf("node %d deleted ok.\n",data);
				return pH;
			}
			printf("node %d deleted ok.\n",data);
		}
		pPrev = p;
		p = p->pNext;
    }
    return pH;
}


int main()
{
    struct node * pHeader = create_node(1);
	printf("Hello world!\n");

    insert_tail(pHeader, create_node(2));
    insert_tail(pHeader, create_node(3));
    insert_head(pHeader, create_node(4));
    insert_head(pHeader, create_node(5));
    list_for_each_2(pHeader);
	pHeader = delete_node_2(pHeader, 3);
	pHeader = delete_node_2(pHeader, 2);
	pHeader = delete_node_2(pHeader, 5);
	pHeader = delete_node_2(pHeader, 4);
	pHeader = delete_node_2(pHeader, 1);
	list_for_each_2(pHeader);
//    printf("1 = %d\n",pHeader->data);
//    printf("2 = %d\n",pHeader->pNext->data);
//    printf("3 = %d\n",pHeader->pNext->pNext->data);
//    printf("4 = %d\n",pHeader->pNext->pNext->pNext->data);
//    printf("5 = %d\n",pHeader->pNext->pNext->pNext->pNext->data);

    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档