链表-其他基本操作

Posted wanjinliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表-其他基本操作相关的知识,希望对你有一定的参考价值。

单向链表的以下操作:

创建
输出
求表长
查找值
插入值
删除节点

代码:

#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
/*
创建
输出
求表长
查找值
追加值(节点) 
删除节点
*/
//节点结构体 
struct Node

    int v;
    Node *next;
;
//创建链表 
Node* create_lian(int n)

    Node *a=new Node,*b;
    b=a;
    cin>>a->v;
    a->next=NULL;
    for(int i=2;i<=n;i++)
    
        a->next=new Node;
        a=a->next;
        cin>>a->v;
        a->next=NULL;
        
    cout<<"Node created."<<endl;
    return b;

//输出链表 
void out_lian(Node *p)

    do
    
        cout<<p->v<<endl;
        p=p->next;
    
    while(p!=NULL);

//求表长
int lian_len(Node *p)

    int c=0;
    while(p!=NULL)
    
        c++;
        p=p->next;
    
    return c;

//查找值所在的位置 
int lian_search(Node *x,int y)

    int p=0;
    while(x!=NULL)
    
        p++;
        if(x->v==y)
        
            return p;
        
        x=x->next;
    
    return p;

//追加值(节点)
void lian_append(Node *x,int y)

    //准备待追加的节点 
    Node t;
    t.v=y;
    t.next=NULL;
    //找到链表的结尾节点 
    while(x->next!=NULL)
    
        x=x->next;
    
    //追加
    x->next=&t; 

//删除值(节点)因为可能第一个点就是要删除的值,必须返回新链表的首地址。 
Node* lian_del(Node *x,int y)

    Node *head=x,*pre;
    //处理要删除的元素(连续)打头的情况 
    while(x->v==y&&x!=NULL)
    
        head=x->next;
        free(x);
        x=head;
    
    pre=head;
    x=head->next;
    while(x!=NULL)
    
        if(x->v==y)
        
            pre->next=x->next;
            free(x);
            x=pre->next;
        
        else
        
            pre=x;
            x=x->next;
        
    
    return head;

main()

    int n,x;
    Node *head;
    cin>>n;
    head=create_lian(n);
    /*//显示节点数
    cout<<lian_len(head)<<endl;
    //查找x所在的位置
    cin>>x;
    cout<<lian_search(head,x);
    //在链表结尾追加值(节点) 
    cin>>x;
    lian_append(head,x);*/
    //从链表中删除值
    cin>>x;
    head=lian_del(head,x);
    out_lian(head); 

end here

以上是关于链表-其他基本操作的主要内容,如果未能解决你的问题,请参考以下文章

王道其他链表

单链表及其基本操作

数据结构---基本数据结构---链表---双向链表

普通链表的各种排序及常用操作

剑指offer--链表小结

块状链表