精华内容
下载资源
问答
  • 题目:给定一个整数num,如何在节点有序的环形链表插入一个节点值为num的节点,并保证这个环形链表依然有序。(假如链表是升序) 解决思路: 1.如果链表为空,则开辟一个节点,让后让他自己指向自己,然后返回该...

    题目:给定一个整数num,如何在节点有序的环形链表中插入一个节点值为num的节点,并保证这个环形链表依然有序。(假如链表是升序)

    解决思路:
    1.如果链表为空,则开辟一个节点,让后让他自己指向自己,然后返回该节点。
    2.如果链表不为空,分为三种情况:
    a.如果插入的节点的值是在环形链表最大值和最小的闭区间范围之内,即在链表[min,max]里面,那么先找到要插入的位置,然后插入。
    在这里插入图片描述
    b.如果插入的节点的值大于链表最后一个值,那么插入的位置就直接是最后一个节点的后面,然后让他指向头结点,最后返回头结点。
    在这里插入图片描述
    c.如果插入的节点小于链表的第一个节点,也就是小于最小的一个节点,那么插入的位置还是链表的最后一个节点的后面,然后让他指向头结点,最后返回新插入的节点。
    在这里插入图片描述

    有了方法,代码就比较好写了。

    typedef struct node
    {
    	DataType data;
    	struct node *p_next;
    }Node ,*PNode;
    
    PNode InsertInCircle(PNode head,DataType data)//插入一个节点在有序链表中,并且插入之后链表有序
    {
    	//1.如果环形链表是空,则将该节点插入,返回该节点
    	if (head == NULL)
    	{
    		PNode pCur = NULL;
    		pCur = (PNode)malloc(sizeof(Node));
    		pCur->data = data;
    		pCur->p_next = pCur;
    		return pCur;
    	}
    	else
    	{
    		//2.先找到只要插入的位置
    		pCur = head->p_next;
    		PNode pPre = head;
    		while (pCur != head)
    		{
    			//a.插入位置在链表内
    			if (pPre->data <= data && pCur->data >= data)
    			{
    				PNode pNode = (PNode)malloc(sizeof(Node));
    				pNode->data = data;
    				pPre->p_next = pNode;
    				pNode->p_next = pCur;
    				return head;
    			}
    			pPre=pPre->p_next;
    			pCur = pCur->p_next;
    		}
    		//.出循环,说明此时data是链表中最大或者是最小的节点
    		//此时pCur==head
    		PNode pNode = (PNode)malloc(sizeof(Node));
    		pNode->data = data; 
    		pPre->p_next = pNode;
    		//b.比头结点小
    		pNode->p_next = pCur;
    		if (data < head->data)
    			return pNode;
    		else
    			//比头结点大
    			return head;
    	}
    }
    

    结果:
    测试的链表有5个节点,分别是1->2->3->4->5->1(最后的1是多打印了一次原链表只有一个值为1的节点)…
    1.当链表为空
    在这里插入图片描述
    2.插入值为1的节点
    在这里插入图片描述
    3.插入值为2的节点
    在这里插入图片描述
    4.插入值为5的节点
    在这里插入图片描述
    5.插入值为6的节点

    在这里插入图片描述
    测试及源代码下载:源代码

    展开全文
  • 循环链表插入节点

    千次阅读 2018-06-12 15:26:09
    由于循环链表的循环特性,所以头节点和尾节点可以被当成一般节点。 所以,我们可以在写循环链表节点插入的函数中,可以调用自定义的函数(如下):void insert_node... //prev_node为插入节点的前一个节点,next_no...

            由于循环链表的循环特性,所以头节点和尾节点可以被当成一般节点。
            所以,我们可以在写循环链表节点插入的函数中,可以调用自定义的函数(如下):
    void insert_node(list_t *insert_node, list_t *prev_node, list_t *next_node)
    {
            //prev_node为插入节点的前一个节点,next_node为插入节点的后一个节点
    	insert_node->next = next_node;
    	insert_node->prev = prev_node;
    	next_node->prev = insert_node;
    	prev_node->next = insert_node;
    }

            当我们写插入函数的时候可以调用这个函数:
    (1)头插:
    void insert_head(list_t *head, list_t *insert)
    {
    	insert_node(insert, head, head->next);
    }

    (2)尾插:
    void insert_tail(list_t *head, list_t *insert)
    {
    	insert_node(insert, head->prev, head);
    }
    (对于循环单向链表,可以设定临界点找到你想要插入的位置的节点来进行头插或尾插)
    展开全文
  • 双向链表插入节点

    2017-09-12 23:15:00
    双向链表插入节点 1、根据实例分析 2、把节点之间的关系看成 是边的拆除和重建 3、为了方便叙述,给边标了号 如图所示是我们要操作的结构体和在双向链表的图。 现在我们的目的就是在ab节点之间插入x节点。 ...

    双向链表插入节点

    1、根据实例分析

    2、把节点之间的关系看成 是边的拆除和重建

    3、为了方便叙述,给边标了号

    如图所示是我们要操作的结构体和在双向链表的图。

    现在我们的目的就是在ab节点之间插入x节点。

    现在我把这六条线都遍上号:

    在插入之前,2,6这两条边是存在的,这两条边就是:

     

    在插入之后,2,6这两条边不存在了,存在的边为4,1,3,5,这四条边就是:

     

    所以要想实现在a,b节点中插入x节点,也就是实现

     

     

    在这个图中,1和6是同一条边,都是a->next,3和2是同一条边,都是b->pre.

     

    现在我们是通过p指针在这个双休链表中找到了b节点,也就是p==b的,并且我们有一个x节点是待插入的。

    在这种情况下,我们找a节点就只能通过p节点,p->pre就代表a。

    显然2这条边就是p->pre,所以我们要想找到a节点,就必须有2这条边。

    而1,4两条边的操作都和a节点有关。

    所以我们要想操作1,4两条边,就必须有a节点,也就是2这条边。

    5这条边的插入顺序很自由,因为我们的x节点和p节点都是已知的。

    所以我们的一个插入顺序为这样:

    1、先拆第6条边,接上第一条边:

    2、然后接上第4条边:

    3、然后接上第5条边:

    4、最后拆除第二条边接上第三条边:

     

     大工告成。

    说一句,这个循序不是唯一的,比如说5这条边我可以在任意时候插入。

    并且如果p节点现在不是指向b,而是指向a,那么一切又都变化了,所以重在理解吧。

     

    转载于:https://www.cnblogs.com/Renyi-Fan/p/7512789.html

    展开全文
  • C++链表插入节点

    千次阅读 2015-04-21 17:41:04
    if (q->data<head->data) // 头结点之前插入节点的情况  {q->next=head; head=q;} else {k=0;  while(p->next) //中间的节点  {if (q->data<p->next->data)  { q->next=p->next; p->next=q; ...

    #include<iostream>
    using namespace std;
    struct node
    { int data;
    node * next;
    };

    int main()
    { node *head,*p,*q,*s;
    head=p=q=s=NULL;
    int i,j,k,n;
    cin>>n;
    q=new node;
    for (i=1;i<=n;i++)
    { s=new node;
    cin>>s->data;

    if (head==NULL)
     head=s;
    else p->next=s;
    p=s;
    }
    p->next=NULL;
    p=head;
    cin>>q->data;
    if (q->data<head->data)    // 头结点之前插入节点的情况
     {q->next=head;
    head=q;}
    else
    {k=0;
     while(p->next)     //中间的节点
      {if (q->data<p->next->data)
        { q->next=p->next;
    p->next=q;
    k++;
    break;
        }
     p=p->next;
      }
     if (k==0)    // 在尾节点之后插入
     { p->next=q;  
     }
    }
    p=head;
    for (i=1;i<=n+1;i++)
     {cout<<p->data<<endl;
         p=p->next;
    }
    }

     

    展开全文
  • 写一个函数insert,用来向一个动态链表插入节点。 方法一: #include <stdio.h> #include <stdlib.h> struct Student { //声明结构体(双向链表结构体) int num; float score; struct Student *...
  • 链表插入节点(C语言实现)

    千次阅读 2020-07-15 17:45:09
    相关背景介绍1.1 双链表概念1.2 双链表的优势与劣势1.3 双链表插入节点的位置2. 不同位置插入数据2.1 在DLL的前端添加节点2.2 在给定节点之前添加节点2.3 在DLL的末尾添加节点2.4 在给定节点之后添加节点3. 综合...
  • 链表插入节点操作)

    千次阅读 2020-12-10 20:39:42
    在双链表L中第i个位置插入值域为e的结点。 双链表的存储结构定义: typedef struct DLinkList{ int data; DLinkList * prior;...3.完成插入节点操作 总结: 先查找第i-1个节点,然后再插入 , 单链
  • 数据结构 链表 插入一个节点

    千次阅读 多人点赞 2020-07-06 15:46:49
    链表 插入一个节点 经典举例 如图:共有四个节点,将第四个节点插入到①②之间。定义了指针向量p指向第一个节点,指针向量q指向节点④ 定义的节点的数据类型如下: //节点的数据类型 typedef struct Node { int ...
  • 指定位置插入节点 先找到要插入的位置(通过节点的属性,比如id或者有序数字) 与单链表不同的时候插入后,next 和 pre 都要与前后节点相连 // 按排序插入节点 public void addByOrder(Node2 node) { // 头节点...
  • 写一个函数insert,用来向一个动态链表插入节点
  • 双向链表节点插入和删除

    千次阅读 2019-04-26 00:49:33
    //跳过头节点的0 while(tmp) { if(tmp->val == num) { del_node = tmp; break; } tmp = tmp->next; } del_node->next->pre = del_node->pre; del_node->pre->next = del_node->next; free(del...
  • 双向链表插入、删除节点(详细图解+代码)

    千次阅读 多人点赞 2020-02-01 20:36:36
    双向链表 在单链表的基础上增加了前缀结点,一定程度上提升了查找元素的速度 在查找元素时,可以反向查找前缀结点 插入结点过程(分为4步) 这四个步骤的顺序可调整,但是必须要保证需要的链不断!!...
  • //插入节点:向链表插入一个节点,需要修改它前面的节点(前驱),使其指向新加入的节点,而新加入的节点则指向原来前驱指向的节点 //find方法:遍历链表,查找给定数据。如果找到数据,该方法就返回保存该...
  • 链表插入结点算法

    2017-06-05 11:12:44
    链表结点插入算法
  • 双向链表——有序双向链表插入节点
  • 关于双向链表插入节点的问题

    千次阅读 2012-09-05 10:38:12
    Status ListInsert(DuLinkList L, int i, ElemType e) {  DuLinkList p;  DuLNode *s; //定义一个链表节点指针  if (i ListLength(L) + 1)  return ERROR;  p = GetElemP(L
  • C语言链表节点插入与删除

    千次阅读 2018-09-17 20:43:31
    Insert X Y:在顺序表中X位置插入Y元素,遍历输出当前顺序表的所有元素。 Delete X:删除顺序表中的X元素,如果有多个X元素,只删除第一个X,遍历输出当前顺序的所有元素。 Locate X:输出顺序表中X元素的所在的位置...
  • 单向链表插入节点

    千次阅读 2018-12-28 14:46:37
    先说1,新节点插入第一个节点之前,成为此链表的首节点:只需把新节点的指针指向链表原来的第一个节点,再把链表头指针指向新节点即可。 python的算法如下: newnode.next=first first=newnode 第二种情况,新节点...
  • 用C语言编写的链表插入节点的程序,供学习参考交流用
  • //链表插入节点(保持链表升序关系) node *insert(node *head, node *p) {//头节点 ,p指向要插入的节点 node *p1, *p2; if (head == NULL) { //链表为空(head=NULL) head = p; p->next = NULL; return ...
  • 单链表的插入节点与删除节点

    千次阅读 2016-12-01 12:03:57
    单链表的插入节点与删除节点
  • 双向链表(1) - 基本介绍以及插入节点

    万次阅读 多人点赞 2015-06-13 23:49:36
    双向链表(1) - 基本介绍以及插入节点
  • 链表-插入节点

    2018-05-24 22:01:53
    数据结构经典算法演示,这里是链表-插入节点的代码演示
  • 在这篇文章中,讨论了在链表插入节点的方法。可以通过三种方式添加节点: 1)在链表的最前面 2)在给定节点之后。 3)在链接列表的末尾。 在前面添加一个节点:(4个步骤) 将新节点始终添加到给定链接列表...
  • 单向链表之有序插入节点(C语言实现)

    千次阅读 多人点赞 2018-03-20 07:50:05
    链表的创建查看 按特定值插入链表,要求链表本身使用某种排序方法排好序的。   链表的插入分四种情况: ...3、在中间插入节点:使新加入的节点的前一个节点指向新加入的节点p_new,新加入的节点的next指...
  • 双向链表插入与删除(c++实现)

    千次阅读 2020-04-30 16:28:13
    目录前言双向链表插入节点实现代码双向链表删除节点实现代码整个项目的完整代码运行截图总结 前言 本篇文章主要接着上文的双向链表的创建与遍历(c++实现) ...
  • /* ...*All rights reserved. ...*问题描述:向单向链表尾部插入节点,新增并提供打印功能 *输入描述:学生姓名 *程序输出:;。 *备注: */ #include <stdio.h> #include<string.h> #inclu...
  • 链表的指定位置插入节点 -- C语言

    千次阅读 2020-02-15 22:06:47
    传入的是个双重指针st_dataNode** phead,因为插入在首节点的位置时候,链表头的位置会发生改变,指向新的节点,所以需要传入双重指针,以便接收修改的新的链表头的位置 代码实现 /* * 传入head是二重指针,是...
  • 插入节点: 3.循环链表 4.双向循环链表 1.单链表: 何为链表? 通过地址的方式,找到数据。 比如 到银行办理业务,业务员根据票号,来找到下一个人进行办理业务。 同样地,链表的意思是,通过一个地址,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 183,771
精华内容 73,508
关键字:

链表插入节点