首页 > 其他 > 详细

单向链表

时间:2019-10-03 12:18:04      阅读:114      评论:0      收藏:0      [点我收藏+]

单项链表的一些必要声明

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

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

typedef int Status;
typedef int ElemType;

typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

从表头到表尾逆向创建链表

图示:当链表为空时的插入情况
技术分享图片
图示:当链表非空时的插入情况
技术分享图片

/**
 * 从表头到表尾逆向创建链表,包含n个节点
 * 需传入表头指针的指针,因为需要对表头指针进行重定向
 * 但凡其传入的参数需要改变原值的都需要传入其指针,包括指针本身
 * 在p节点后插入in节点方法:in先和p指向相同的后继元,p再指向in
 */
void CreateList(LinkList * L, int n)
{
    *L = (LinkList)malloc(sizeof(LNode)); /* 建立头结点 */
    (*L)->next = NULL;
    LinkList in;
    for( ; n>0; n--) {
        in = (LinkList)malloc(sizeof(LNode));
        scanf("%d",&in->data); /* 创建新的节点 */
        in->next = (*L)->next; /* 总是在头结点之后插入 */
        (*L)->next = in;
    }
}

从链表中获取第 i 个元素的数据

图示:链表为空,p一开始就指向NULL,不满足直接退出
技术分享图片
图示:链表非空,while退出条件是j==i,退出时,p刚好指向第i个节点
技术分享图片
图示:链表非空,但i的位置为处没有节点,while退出条件是p==NULL,不满足
技术分享图片

/**
 * 从链表中获取第 i 个元素的数据。
 * 思路:可以从第一个元素开始p和j同步走,如果j=i满足退出,则p指向第i个节点
 * 若是空表,则一开始p就为空了,直接返回error
 * 若不是空表,但p到达了NULL,说明i不满足,也直接返回error
 */
Status GetElem(LinkList L, int i, ElemType *e)
{
    LinkList p = L->next;  /* p指向第一个元素 */
    int j = 1;             /* j从第 1 个元素开始 */
    while (p && j<i) {     /* 顺指针向后查找,直到p指向第i个元素或p为空 */
        p = p->next;       
        j++;
    }
    if(!p || j>i) 
        return ERROR;      /* 若p到达NULL,则必然没找到 */
    *e = p->data;
    return OK;
}

单向链表

原文:https://www.cnblogs.com/wjundong/p/11619214.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!