链表的插入求长度查值操作

通过对链表的学习发现,对链表不同的操作有不同的赋初始值值

下面对比学习

1对链表的值查询

// 在链表中查找值为key的节点
Node * Locate(Node *L, ElemType key)
{
    Node *p = L->next; //从表中第一个节点开始
    while(p != NULL)
    {
        if (p->data != key)
            p = p->next;
        else
            break;
    }
    return p;
}

对链表的值查询操作,初始化时 p = L->next

2求链表的长度

// 求链表的长度
int ListLength(Node *L)
{
    int length = 0;
    Node *p = L->next;
    while(p != NULL)
    {
        length++;
        p = p->next;
    }        
    return length;
}

对链表的求长度操作也是初始化,p = L->next

3对链表的插入值

// 链表的插入操作
void * insList(Node *L, int i, ElemType e)
{
    LinkList pre = L, s;
    int k = 0;
    if(i <= 0)
        return 0;
    while(pre != NULL && k < i-1) //直到pre指向第i-1个元素
    {
        k++;
        pre = pre->next;
    }
    if(!pre)
    {
        printf("insert increct
");
        return ERROR;
    }
    s = (Node *)malloc(sizeof(Node));
    s->data = e;
    s->next = pre->next;
    pre->next = s;
}

对链表的初始化 pre = L;

与以上两个操作不同。

在此,总结一下对链表的操作

1)查找:在单链表找到第i-1个结点,并由指针pre指示

2)申请:申请新节点s,将其数据域的值为e  :s->data = e;

3)插入链表,此操作同尾插法、头插法一致

  先操作待插入结点的后面:s->next = pre->next;

  载操作待插入结点的前面:pre->next = s;

如下图所示

 

原文地址:https://www.cnblogs.com/hello-lijj/p/6588997.html