博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单链表类,链表逆置
阅读量:4983 次
发布时间:2019-06-12

本文共 4040 字,大约阅读时间需要 13 分钟。

1 #pragma once 2 #include"iostream" 3 #include 
4 #include
5 using namespace std; 6   7 struct Node 8 { 9     int val;10     Node *next;11     Node(int nVal, Node *nNext = NULL) {12         val = nVal;13         next = nNext;14     }15     Node() {}16 };17  18 class ListNode19 {20 private:21     Node *head;  //声明头节点22     int counts;23  24 public:25     ListNode();26     ~ListNode();27     void CreateList(int n);28     void CreateListByPC(int n,int randnum);29     ListNode* Reverse();30     ListNode* ReverseBetween(int m, int n);31     void ShowList();32     int ListLength();33     void InsertNode(int position, int value);34     void DeleteNode(int position);35     Node *GetNodeByPosition(int position);36 };[/align]37 [align=center]38 [size=6][color=#48d1cc]源文件[/color][/size]

实现文件如下:

#include "ListNode.h"  ListNode::ListNode(){    head = new Node;    head->next = NULL;    head->val = 0;} ListNode::~ListNode(){    Node * temp = head; //创建一个临时变量保存删除节点信息    while(head->next){        temp = head->next;        delete head;        head = temp;    }    delete head;    cout << "该链表析构完成..." << endl;} void ListNode::CreateList(int n){    cout << "正在创建长度为" << n << "的链表......" << endl;    Node *preNode = head;    for (int i = 0; i < n; i++)    {        Node *newNode = new Node;        cout << "请输入该节点的值: ";        cin >> newNode->val;        newNode->next = NULL;        preNode->next = newNode;        preNode = newNode;    }} void ListNode::CreateListByPC(int n, int randnum){    cout << "正在创建长度为" << n << "的链表,其值范围为:" << randnum << endl;    srand((unsigned int)time(NULL));    Node *preNode = head;    for (int i = 0; i < n; i++)    {        Node *newNode = new Node;        newNode->val = rand()%randnum;        newNode->next = NULL;        preNode->next = newNode;        preNode = newNode;    }} ListNode * ListNode::Reverse(){    cout << "正在逆置链表..." << endl;    Node *newHead = NULL;           //临时变量,遍历新链表    Node *vNode = head->next;        //取第一个节点开始遍历    while (vNode!=NULL)    {        Node *temp = vNode->next;    //备份原链表的下一个节点信息        vNode->next = newHead;       //当前节点的指针域修改        newHead = vNode;        vNode = temp;    }    head->next = newHead;    return NULL;} ListNode * ListNode::ReverseBetween(int m,int n){    if (m <= 0 || n >= this->counts)        return false;    Node *temp = head;              //临时变量保存头节点    int changeLength = n - m + 1;   //获取需要逆置的个数     while (--m)    {        temp = temp->next;    }     Node *preNode = temp;       //找到m节点的前置节点    temp = temp->next;    Node *changeTail = temp;    //m节点,即需要改变的尾节点    Node *newHead = NULL;          cout << "changeLength = " << changeLength << endl;     int i = 0;    while (changeLength--)    {        cout << "正在执行第" << ++i << "ci" << endl;        Node *vNode = temp->next;    //备份下一个节点的信息        temp->next = newHead;        newHead = temp;        temp = vNode;    }     preNode->next = newHead;    changeTail->next = temp;    return NULL;} void ListNode::ShowList(){    Node *tempNode = head;    while (tempNode->next)    {        cout << tempNode->next->val <<"\t";        tempNode = tempNode->next;    }    cout << endl << "该链表已显示完毕..." << endl;} int ListNode::ListLength(){    Node *temp = head;    for (; temp->next != NULL; temp = temp->next)        counts++;    return counts;} void ListNode::InsertNode(int position, int value){    Node *temp = this->GetNodeByPosition(position - 1);    Node *newNode = new Node(value);    newNode->next = temp->next;    temp->next = newNode;} void ListNode::DeleteNode(int position){    if (position<1 || position>this->ListLength())        return;    Node *temp = this->GetNodeByPosition(position - 1);    Node *delNode = temp->next;    temp->next = delNode->next;    delete delNode;} Node * ListNode::GetNodeByPosition(int position){    if (position<1 || position>this->ListLength())        return flase;     Node *temp = head;    for (int i = 0; i < position; i++)        temp = temp->next;    return temp;}

  

转载于:https://www.cnblogs.com/cyhezt/p/10426857.html

你可能感兴趣的文章
数据库 join
查看>>
AES加密工具类[亲测可用]
查看>>
方法区
查看>>
Django-----ORM
查看>>
ARCGIS部分刷新
查看>>
发 零 食
查看>>
poj3613:Cow Relays(倍增优化+矩阵乘法floyd+快速幂)
查看>>
洛谷P1886 滑动窗口
查看>>
Shell编程(二)Bash中调用Python
查看>>
主动与被动监控 拓扑图组合图 自定义监控
查看>>
SQL总结(一)基本查询
查看>>
PDF分割--可脱离python环境执行,可传参数,可弹窗的PC端小工具
查看>>
cas-client-core单点登录排除不需要拦截的URL
查看>>
OCR技术浅探 : 文字定位和文本切割(2)
查看>>
jmeter集合点
查看>>
Java类代码块执行顺序
查看>>
克鲁斯卡尔(模板题)
查看>>
汉字转拼音
查看>>
Python中Web框架编写学习心得
查看>>
dataTable/dataSet转换成Json格式
查看>>