C++代码实现单链表的查找插入删除操作

输入3 4 5 6 7 9999一串整数,9999代表结束,通过尾插法新建链表,查找第二个位置的值并输出,在2个位置插入99,输出为  3 99  4  5  6  7,删除第4个位置的值,打印输出为  3 99  4  6  7。

#include 
#include 

//输入3 4 5 6 7 9999一串整数,9999代表结束,通过尾插法新建链表,
// 查找第二个位置的值并输出,在2个位置插入99,输出为  3 99  4  5  6  7,删除第4个位置的值,打印输出为  3 99  4  6  7。
typedef int ElemType;
typedef struct LNode{
    ElemType data;
    struct LNode* next;
}LNode,*LinkList;

//尾插法建立单链表
LinkList linkList_tail_insert(LinkList &L){
    ElemType x;
    L = (LinkList)malloc(sizeof(LNode));
    LinkList s,per=L;
    scanf("%d",&x);
    while (x!=9999){
        s=(LinkList)malloc(sizeof(LNode));
        s->data=x;
        per->next=s;
        per=s;
        scanf("%d",&x);
    }
    per->next=NULL;
    return L;
};

//打印链表函数
void PrintList(LinkList L)
{
    L = L->next;
    while (L != NULL)
    {
        printf("%3d", L->data);//打印当前结点数据
        L = L->next;//指向下一个结点
    }
    printf("\n");
}
//查找函数
LinkList linklist_find(LinkList L,int a){
    LinkList p=L->next;
    int i=1;
    while (p&&inext;
        i++;
    }
    return p;
}

//插入函数
LinkList linkList_insert(LinkList L,int pos,int x){
    LinkList pre= linklist_find(L,pos-1);
    LinkList s=(LinkList)malloc(sizeof(LNode));
    s->data=x;
    s->next=pre->next;
    pre->next=s;
    return L;
}

//删除函数
bool linkList_delete(LinkList L,int pos){//pos为删除位置
    LinkList p = linklist_find(L,pos-1);
    if(NULL==p){
        return false;
    }
    LinkList q = p->next;
    if(NULL==q){
        return false;
    }
    p->next=q->next;
    free(q);
    return true;
};

int main() {
    LinkList L,ret;
    linkList_tail_insert(L);
//    PrintList(L);
    ret = linklist_find(L,2);
    printf("%d\n",ret->data);
    linkList_insert(L,2,99);
    PrintList(L);
    linkList_delete(L,4);
    PrintList(L);

    return 0;
}

实现结果如下图

C++代码实现单链表的查找插入删除操作_第1张图片

 

题目来源王道

你可能感兴趣的:(c++,链表,数据结构)