单链表的插入伪算法和用C语言创建单链表,并遍历

非循环单链表插入结点伪算法讲解



q插入p之后的伪算法:
第一种表示方法:
r = p->pNext; // p->pNext表示的是所指向结点的指针域,指针域又是指向下一个结点的地址
p->pNext = q; // q保存了那一块结点的地址。q是一个指针变量,存放那个结点的地址。
q->pNext = r;

第二种表示方法:
q->pNext = p->pNext; // q的指针域指向p后面一个结点
p->pNext = q; // p的指针域指向q

删除非循环单链表结点伪算法:
把p后面的一个结点删除掉
r = p->pNext;
p->pNext = p->pNext->pNext;
free(r); // 释放内存

链表创建和链表遍历算法的演示:

创建一个单链表,然后遍历。
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

/*
创建一个单链表,然后遍历。
*/

typedef struct Node
{
    int data; // 数据域
    struct Node *pNext; // 指针域
}NODE, *PNODE; // NODE等价于struct Node, PNODE等价于struct Node *

// 函数声明
PNODE create_list(void);
void traverse_list(PNODE pHead);

int main(void)
{
    PNODE pHead = NULL; // 等价于 struct Node *pHead = NULL;

    pHead = create_list(); // 创建一个非循环单链表,并将该链表的头结点的地址赋值给pHead
    // 遍历单链表
    traverse_list(pHead);

    return 0;
}

/*
创建一个非循环单链表,
返回该单链表头节点的地址
*/
PNODE create_list(void)
{
    int len; // 用来存放有效结点的个数
    int i;
    int val; // 用来临时存放用户输入的结点的值

    // 分配一个不存放有效数据的头结点
    PNODE pHead = (PNODE)malloc(sizeof(NODE));
    if(pHead == NULL)
    {
        printf("内存分配失败,程序终止!");
        exit(-1);
    }
    // pTail代表尾结点,指针域为NULL
    PNODE pTail = pHead;
    pTail->pNext = NULL;

    printf("请输入您需要生成的单链表结点的个数: len =");
    scanf("%d", &len);

    for(i = 0;i < len;i++)
    {
        printf("请输入第%d个结点的值:
", i + 1);
        scanf("%d", &val);

        PNODE pNew = (PNODE)malloc(sizeof(NODE));
        if(pNew == NULL)
        {
            printf("内存分配失败,程序终止!");
            exit(-1);
        }
        pNew->data = val;
        // 把新生成的结点挂到pNext指针域上
        // pTail代表最后一个结点,指针域为NULL
        pTail->pNext = pNew;
        pNew->pNext = NULL;
        pTail = pNew;
    }
    return pHead;
}
// 遍历单链表
void traverse_list(PNODE pHead)
{
    PNODE p = pHead->pNext;
    
    // 如果p不为空,表明p已经指向一个结点了,
    // 如果p为空,表明单链表为空,指向的是空的头结点
    while(p != NULL)
    {
        printf("%d", p->data);
        p = p->pNext; // p往后移
    }
}
原文地址:https://www.cnblogs.com/lqcdsns/p/6660086.html