首页 > 其他 > 详细

有关链表操作的一些代码

时间:2014-03-14 18:18:56      阅读:461      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
#include <iostream>
using namespace std;

typedef struct Sun
{
    int num;
    struct Sun* next;
}Node;

/*头指针:头指针所指节点的数据域往往为空或者可以存放链表
<br>长度等类似信息,其next域指向的节点才是第一个有效节点*/

/*用头插法和尾插法两种方式创建有头指针的单链表,返回头指针*/

//头插法
Node* headCreate()
{
    Node *head = new Node;
    head->next = NULL;
    int value;
    std::cout<<"用头插法创建有头指针的单链表,返回头指针,输入0结束创建."<<std::endl;
    std::cout<<"输入一个整数:";
    std::cin>>value;
    while ( value )
    {
        Node *temp = new Node;
        temp->num = value;
        temp->next = head->next;
        head->next = temp;
        std::cout<<"输入一个整数:";
        std::cin>>value;
    }
    return head;
}

//尾插法
Node* tailCreate()
{
    Node *head = new Node, *ptr = head;
    head->next = NULL;
    int value;
    std::cout<<"用尾插法创建有头指针的单链表,返回头指针,输入0结束创建."<<std::endl;
    std::cout<<"输入一个整数:";
    std::cin>>value;
    while ( value )
    {
        Node *temp = new Node;
        temp->num = value;
        temp->next = NULL;
        ptr->next = temp;
        ptr = temp;
        std::cout<<"输入一个整数:";
        std::cin>>value;
    }
    return head;
}

//用尾插法创建了一个没有头指针的单链表,返回第一个节点的指针
Node* create()
{
    Node *p = NULL, *first = NULL;
    int value;
    std::cout<<"创建单链表,返回第一个节点的指针,输入0结束创建."<<std::endl;
    std::cout<<"输入一个整数:";
    std::cin>>value;
    if ( 0 == value )
    {
        std::cout<<"没有创建节点."<<std::endl;
        return first;
    }
    else
    {
        p = new Node;
        p->num = value;
        p->next = NULL;
        first = p;
    }

    std::cout<<"输入一个整数:";
    std::cin>>value;
    while ( value )
    {
        Node *ptr = new Node;
        ptr->num = value;
        ptr->next = NULL;
        p->next = ptr;
        p = ptr;
        std::cout<<"输入一个整数:";
        std::cin>>value;
    }

    return first;
}
bubuko.com,布布扣

 

bubuko.com,布布扣
/*!
\brief 删除单链表中的节点
\param Node* head 链表
\<br>  int data 要删除节点数据域的值
\return Node* 执行删除操作之后的单链表
\note1 仅删除首个数据域为num的节点
*/
Node* delNode( Node* head, int data )
{
    Node *ptr1 = head, *ptr2;
    while ( data != ptr1->num && NULL != ptr1->next )
    {
        ptr2 = ptr1; ptr1 = ptr1->next;
    }

    if ( data == ptr1->num )
    {
        if ( ptr1 == head )
        {
            head = head->next;
            ptr1->next = NULL;
            delete ptr1;
        } 
        else
        {
            ptr2->next = ptr1->next;
            ptr1->next = NULL;
            delete ptr1;
        }
    } 
    else
    {
        std::cout<<"不存在"<<data<<"值的节点"<<std::endl;
    }
    return head;
}
bubuko.com,布布扣

 

bubuko.com,布布扣
/*!
\brief 单链表的插入
\param Node* head 链表
\<br>  int data 要插入节点数据域的值
\return Node* 执行插入操作之后的单链表
\note1 按数据域中的num值插入,插在首个比data大的节点之前
*/
Node* insertNode( Node* head, int data )
{
    Node *temp = new Node, *ptr1 = head, *ptr2;
    temp->num = data;
    while ( data > ptr1->num && ptr1->next != NULL )
    {
        ptr2 = ptr1; ptr1 = ptr1->next;
    }

    if ( data <= ptr1->num )
    {
        if ( ptr1 == head )
        {
            temp->next = head; head = temp;
        } 
        else
        {
            temp->next = ptr1; ptr2->next = temp;
        }
    } 
    else
    {
        ptr1->next = temp; temp->next = NULL;
    }
    return head;
}
bubuko.com,布布扣

有关链表操作的一些代码,布布扣,bubuko.com

有关链表操作的一些代码

原文:http://www.cnblogs.com/seisterritroy/p/3599342.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!