您现在的位置是:首页 > 正文

双向链表的创建,添加与删除

2024-02-29 14:31:24阅读 0

问题描述:1.生成双向链表:根据给定的数组元素,生成双向链表,并返回双向链表的头结点。

    2.双向链表尾部添加元素:给定一个元素,在双向链表的尾部添加一个新的元素。

    3.移除元素:给定一个元素,删除双向链表中与之值相等的节点。

注意事项:链表为空(添加);链表仅有一个头结点(删除)。

代码如下:

#include <iostream>
using namespace std;

struct DoubleListNode
{
 int value;
 DoubleListNode *next;
 DoubleListNode *piror;
};
//创建双向链表
DoubleListNode* createDoubleList(int *array, int length)
{
 DoubleListNode *p,*q,*pHead;
 q=pHead=new DoubleListNode();
 pHead->piror=NULL;
 if(length==0)
  pHead==NULL;
  else
  {
   for(int i=0;i<length;i++)
   {
    p=new DoubleListNode();
    p->value=array[i];
    q->next=p;
    p->piror=q;
    q=p;
    //链表的值跟数组中的值顺序相反
   }
   q->next=NULL;
  }
return pHead;
}

void AddToTail(DoubleListNode *pHead,int value)
{
 DoubleListNode *p=new DoubleListNode();
 p->value=value;
 p->next=NULL;
 p->piror=NULL;

 if(pHead==NULL)
  pHead=p;
 else
  {
   DoubleListNode *p1=pHead;
   while(p1->next!=NULL)
    p1=p1->next;
    p1->next=p;
    p->piror=p1;
    p->next=NULL;
  }
}

void RemoveNode(DoubleListNode *pHead, int value)
{
 if(pHead==NULL)
 {
  cout<<"没有满足条件的节点!"<<endl;
  return;
 }
  DoubleListNode *p=pHead;
  DoubleListNode *pToBeDeleted=NULL;
  //如果头指针等于要删除的节点的值时,需要特殊处理
  if(pHead->value==value)
   {
    pToBeDeleted=pHead;
    if(pHead->next!=NULL)
     pHead=pHead->next;
   }

while(p->next!=NULL&&p->next->value!=value)
 p=p->next;
if(p->next!=NULL&&p->next->value==value)
 {
  pToBeDeleted=p->next;
  p->next->next->piror=p;
  p->next=p->next->next;
 }
 else
  cout<<"没有满足条件的节点!"<<endl;
if(pToBeDeleted!=NULL)
{
 delete pToBeDeleted;
 pToBeDeleted=NULL;
}
}

void PrintList(DoubleListNode *pHead)
{
 if(pHead==NULL)
  cout<<"链表为空"<<endl;
 else
 {
  DoubleListNode *p=pHead;
  while(p!=NULL)
   {
    cout<<p->value<<ends;
    p=p->next;
   }

 }
 cout<<""<<endl;
}


int main()
{
    int a[7]={1,2,3,4,5,6,7};
    DoubleListNode *pHead=createDoubleList(a,7);
    cout<<"新生成的链表中元素为:"<<endl;
    PrintList(pHead);
    AddToTail(pHead,8);
    cout<<"添加至尾部后链表中元素为:"<<endl;
    PrintList(pHead);
    RemoveNode(pHead, 4);
     cout<<"移除元素后链表中元素为:"<<endl;
    PrintList(pHead);

   // cout << "Hello world!" << endl;
    return 0;
}


网站文章

  • 列表列数不确定html,flex布局最后一行列表左对齐的方法

    最后一行列数不固定1 .使用足够多的空白标签来填充占位2 .如果一行最多有7个元素,那么添加6个空白的元素即可3 .代码.container {display: flex;justify-conten...

    2024-02-29 14:31:17
  • 一文详解密码学Hash算法的安全问题(加盐+HMAC)

    今天我们另开一篇文章,着重介绍密码学Hash算法的主要安全问题以及对应的解决办法。希望能大家使用密码学Hash算法带来更多维度的考量。内容将会涉及到彩虹表,撞库等黑客部分网络安全攻击,对于用加盐的方式来避免这种攻击,以及如何用HMAC来确保消息的一致性

    2024-02-29 14:31:10
  • node点滴积累----http.createServer()

    node点滴积累----http.createServer()

    var http = require(&quot;http&quot;) http.createServer(function(req,res){//回调函数 console.log(req.httpVersion); console.log(req.headers); console.log(req.method); console.log(req.url); console...

    2024-02-29 14:30:40
  • html渐变设置颜色长度,css渐变色注意的几点

    1.角度和from to只能运行一个。并且可以相互代替。看api语法: = linear-gradient([ [ | to ] ,]? [, ]+) = [left | right] || [top | bottom] = [ | ]?下述值用来表示渐变的方向,可以使用角度或者关键字来设置::用角度值指定渐变的方向(或角度)。to left:设置渐变为从右到左。相当于: 270degt...

    2024-02-29 14:30:33
  • 怎样在网上赚钱啊,小编告诉你6种赚钱方式!

    怎样在网上赚钱啊,小编告诉你6种赚钱方式!

    在网络上赚钱,对于懂得人来说是非常简单的,但是对于新手来说,却是很难的。下面小编就给大家分析一下,新手如何在网络上赚钱? 首先,我们先来了解一下,新手赚钱难的四个原因。 第一、从来没有接触过。 第二、...

    2024-02-29 14:30:26
  • 第十节 ARP 协议

    第十节 ARP 协议

    ARP 协议

    2024-02-29 14:30:19
  • py4j.Py4JException: Method getCodeAndVersion([class java.lang.String, class java.lang.String, class

    py4j.Py4JException: Method getCodeAndVersion([class java.lang.String, class java.lang.String, class

    py4j.Py4JException: Method getCodeAndVersion([class java.lang.String, class java.lang.String, class java.lang.String]) does not exist No module named &#39;pydolphinscheduler&#39;

    2024-02-29 14:29:50
  • javascript字符串相关的面试题总结

    把字符串转换成驼峰式写法,用两种方法实现 第一种方法: var str = &quot;border-left-color&quot;; function change(str){ var arr =str.split(&#39;-&#39;); for(var i=1; i

    2024-02-29 14:29:43
  • Python基础小结

    目录 一、执行Python程序的两种方式 1.1 交互式 1.2 命令行式 二、执行Python程序的两种IDE 2.1 Pycharm 2.2 Jupyter 三、变量 3.1 什么是变量? ...

    2024-02-29 14:29:34
  • 简单ROP exploit入门之protostar stack7

    通过protostar stack7来入门最简单的ROP exploit

    2024-02-29 14:28:20