前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >链表的相关操作

链表的相关操作

作者头像
用户1215536
发布2018-02-05 16:06:37
5180
发布2018-02-05 16:06:37
举报
代码语言:javascript
复制
#include<iostream>
using namespace std;
struct node
{
    int data;
    node *next;
};
//链表的建立,创建有n个结点的链表
node *create(int n)
{
    node *head=NULL;
    node *p=NULL;
    head=new node();
    p=head;
    cin>>p->data;
    node *q;
    while(--n)
    {
        q=new node();
        cin>>q->data;
        p->next=q;
        p=q;
    }
    p->next=NULL;
    return head;
}
//打印结点
void print(node *head)
{
    node *p=head;
    while(p!=NULL)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}
//插入结点
//在指定位置weizhi上插入结点值为n的结点
//这里注意返回值不能写成void因为当weizhi为0的时候,head的值变动了,如果不返回head虽然那么原函数中的head还在原来的位置
node* insert(node *head,int weizhi,int n)
{
    node *p=NULL;
    if(weizhi<0)
    {
        return 0;
    }
    if(weizhi==0)
    {
        p=new node();
        p->data=n;
        p->next=head;
        head=p;
    }
    if(weizhi>0)
    {
        p=head;
        int num=weizhi;
        while(--num)
        {
            p=p->next;
        }
        node *t=p->next;
        node *q=new node();
        q->data=n;
        p->next=q;
        q->next=t;
    }
    return head;
}
//删除第一个值为n的结点
node *delete_node(node *head,int n)
{
    if (head==NULL)
    {
        return NULL;
    }
    else if(head->data==n)
    {
        node *p=head;
        head=head->next;
        delete p;
        return head;
    }
    else 
    {
        node *p,*q;
        p=head;
        q=p->next;
        while(q!=NULL && q->data!=n)
        {
            p=p->next;
            q=q->next;
        }
        if(q==NULL)
        {
            return head;
        }
        else 
        {
            p->next=q->next;
            delete q;
            return head;
        }
    }
}
//链表的逆转
node *reverse(node *head)
{
    node *p=NULL;//指向要逆转指针的前一个结点
    node *r=head;//指向要逆转的结点
    node *q=NULL;//指向要逆转结点的后一个结点
    while(r!=NULL)
    {
        q=r->next;
        r->next=p;
        p=r;
        r=q;
    }
    head=p;     //注意全都逆转之后,结点r已经为NULL,结点p才是最后一个有数据的结点
    return head;
}
int main()
{
    node *head=create(5);
    print(head);
    head=insert(head,2,100);
    print(head);
    head=insert(head,0,1000);
    print(head);
    head=delete_node(head,3);
    print(head);
    head=delete_node(head,5);
    print(head);
    head=delete_node(head,1000);
    print(head);
    head=reverse(head);
    print(head);
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-08-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档