linux c 链表

#include <stdio.h>
//设计节点结构
typedef struct Node
{
    int data;
    struct Node *pNext;
}NODE, *pNODE;
int GetLengthSgLinkList(pNODE pHead)
{
    int length = 0;
    pNODE pt = pHead->pNext;
 
    while (pt != NULL)
    {
        length++;
        pt = pt->pNext;
    }
    return length;
}
int InsertEleSgLinkList(pNODE pHead, int pos, int data)
{
    pNODE pt = NULL, p_new = NULL;
 
    if (pos > 0 && pos < GetLengthSgLinkList(pHead) + 2)
    {
        p_new = (pNODE)malloc(sizeof(NODE));
        if (NULL == p_new)
        {
            exit(0);
        }
        p_new->data = data;
 
        while (1)
        {
            pos--;        
            if (0 == pos)
                break;
            pHead  = pHead->pNext;//假设插入位置是一,此时pHead指向第一个节点的地址
        }
 
        pt = pHead->pNext;//
        pHead->pNext = p_new;
        p_new->pNext = pt;
 
        return 1;
    }
    else
        return 0;
}
void TraverseSgLinkList(pNODE pHead)
{
    pNODE pt = pHead->pNext;
 
    while (pt != NULL)
    {
        printf("%d ", pt->data);
        pt = pt->pNext;
    }
    putchar('\n');
}

void main(){
    int i, length, data;
    pNODE p_new = NULL, pTail = NULL;
    pNODE pHead = (pNODE)malloc(sizeof(NODE));//创建头结点
 
    if (NULL == pHead)
    {
        printf("内存分配失败!\n");
        exit(0);
    }
 
    pHead->data = 0;//给头结点赋值 这个值可以随意  不是有效值
    pHead->pNext = NULL;//头结点指针初始化位空
    pTail = pHead;//使用pTail当中间变量  给不同的节点赋值
 
     length=5;
    data=9000;
    for (i=1; i<length+1; i++)
    {
        p_new = (pNODE)malloc(sizeof(NODE));
        if (NULL == p_new)
        {
            exit(0);
        }
                
        p_new->data = data;//新创建节点data赋值
        p_new->pNext = NULL;//当前节点应当保存的是下一个节点的地址,由于下一个节点的地址还没有产生,所以应给null
        pTail->pNext = p_new;//将当前节点的地址传给上一个节点保存
        pTail = p_new;//改变pTail的地址指向,使其指向p_new这个节点,以便在下次循环的时候给p_new节点应该指向的节点赋值
        data++;
    }
TraverseSgLinkList(pHead);
InsertEleSgLinkList(pHead, 2, 2);
pNODE pt = pHead->pNext;
 
    while (pt != NULL)
    {
        printf("%d ", pt->data);
        pt = pt->pNext;
    }
    putchar('\n');

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值