C中的单链表(insert_pos,sort,delete_elem)

时间:2017-05-28 20:46:42

标签: c list singly-linked-list

我不知道函数insert_pos为什么不起作用。错误是:

  

会员参考基础类型' list' (又名' struct le *')不是结构或联合。

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

struct le{
  int value;
  struct le *next;
};
typedef struct le listenelement;
typedef listenelement *list;

int insert_pos(int v, int pos, list *l){
    listenelement * new;
    new = malloc(sizeof(listenelement));
    new->value = v;

    for(int i = 0; i < pos - 3; i++){
        *l = l->next;
    }
    new->next = l->next;
    l->next = new;
}

int delete elem(int e, list * l){

}
void sort(int m, list * l){

}

int main() {

    return 0;
}

2 个答案:

答案 0 :(得分:0)

为什么insert_pos使用 pos-3

要修复语法错误,该行应为:

        l = &((*l)->next);
当且仅当新节点插入列表的前面时,

insert_pos才应更新传递的列表指针。

作为替代方案,insert_pos可以返回指向列表的指针:

listenelement * insert_pos(int v, int pos, listenelement *l)

答案 1 :(得分:0)

我希望你能用它。 它创建了一些链表的元素,并在位置

之后插入一个新节点
#include <stdio.h>
#include <stdlib.h>

typedef struct le{
    int value;
    struct le *next;
}listenelement;

// this can create a new element of the linked list

listenelement *insert(int v,int pos, listenelement *first)
{
    int i;
    listenelement *move, *new;
    new = (listenelement*)malloc(sizeof(listenelement));
    // adatok bszuras
    new->value = v;
    //data insert end
    new->next = NULL;
    if (first == NULL)//emtpy list ? 
        return new;
    for (move = first; move->next != NULL; move = move->next);
    // emtpy cycle can find the last element of linked list
    move->next = new;
    return first;
}


listenelement* insert_pos(int v, int pos, listenelement *l){
    listenelement * new;

        new = (listenelement*)malloc(sizeof(listenelement));
        new->value = v;

        for (int i = 0; i < pos; i++){
            l = l->next;
        }
        new->next = l->next;
        l->next = new;

}

int delete_elem(int e, listenelement * l){

}
void sort(int m, listenelement * l){

}

int main() {
    int i;
    listenelement *first = NULL;
    listenelement *act;

    act = insert(1, 0, first);
    insert(5, 0, act);
    insert(6, 0, act);
    insert(7, 0, act);
    //insert after second element
    insert_pos(11, 2, act);
    insert(7, 0, act);
    insert(7, 0, act);
// print the list elements
    while (act != NULL){
        printf(" content: %d\n", act->value);
        act = act->next;
    }

    return 0;
}