精华内容
下载资源
问答
  • ① 我们知道头插法最终创建的链表的顺序与插入的顺序正好是相反的,所以我们可以修改之前的将两个递增有序的链表合并成一个非递减的链表程序,将头插法修改为尾插法 ② 与头插法不同的是,头插法在while循环之后...

    1. 问题描述:

    A和B是两个单链表(带有表头节点),其中元素是递增有序的,设计一个算法,将A和B归并成一个按元素值非增减有序的链表C,C由链表A和B的节点组成

    2. 思路分析:

    ① 我们知道头插法最终创建的链表的顺序与插入的顺序正好是相反的,所以我们可以修改之前的将两个递增有序的链表合并成一个非递减的链表程序,将头插法修改为尾插法

    ② 与头插法不同的是,头插法在while循环之后可以直接将指向链表C的指针指向剩余的没有插入完的链表的剩余部分,但是尾插法不可以这样,因为需要形成非递增的序列所以需要使用while循环将链表的剩余节点一个个地插入到链表C中

    3. 下面是具体的C语言代码:

    #include<stdio.h>
    #include<malloc.h>
    typedef struct LNode{
    	int data;
    	LNode *next;
    }LNode;
    LNode *A, *B, *C;
    void merge(LNode *A, LNode *B, LNode *&C){
    	LNode *p = A->next;
    	LNode *q = B->next;
    	LNode *s;
    	LNode *r;
    	C = A;
    	C->next = NULL;
    	free(B);
    	r = C;
    	while(p != NULL && q != NULL){
    		if(p->data <= q->data){
    			s = p;
    			//先要操作这一步否则后面的元素会找不到 
    			p = p->next;
    			s->next = r->next;
    			r->next = s;
    		}
    		else{
    			s = q;
    			q = q->next;
    			s->next = r->next;
    			r->next = s;
    		}
    	}
    	while(p != NULL){
    		s = p;
    		p = p->next;
    		s->next = r->next;
    		r->next = s;
    	}
    	while(q != NULL){
    		s = q;
    		q = q->next;
    		s->next = r->next;
    		r->next = s;
    	}
    }
    
    void createLinkList(){
    	LNode *pa;
    	LNode *pb;
    	A = (LNode*)malloc(sizeof(LNode));
    	B = (LNode*)malloc(sizeof(LNode));
    	pa = A;
    	pb = B;
    	pa->next = NULL;
    	pb->next = NULL;
    	
    	for(int i = 1; i <= 10; i += 2){
    		LNode *newNode = (LNode*)malloc(sizeof(LNode));
    		newNode->data = i;
    		pa->next = newNode;
    		pa = pa->next;
    	} 
    	pa->next = NULL;
    	for(int i = 2; i <= 8; i += 2){
    		LNode *newNode = (LNode*)malloc(sizeof(LNode));
    		newNode->data = i;
    		pb->next = newNode;
    		pb = pb->next;
    	} 
    	pb->next = NULL;
    }
    
    int main(void){
    	createLinkList();
    	merge(A, B, C);
    	LNode *p = C;
    	while(p->next != NULL){
    		printf("%d ", p->next->data);
    		p = p->next;
    	} 
    	return 0;
    } 

     

    展开全文
  • // 链表基本操作.cpp : 定义控制台应用程序入口点。 // // 链表基本操作.cpp : 定义控制台应用程序入口点。 // #include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef ...
    展开全文
  • ** 思路:定义一个头指针用来创建一个链表,并且判断l1,l2是否为NULL要写在前面 ** /* 时间:2020/08/10 */ ` /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ...

    ** 思路:定义一个头指针用来创建一个新链表,并且判断l1,l2是否为NULL要写在前面 **

    /* 
      时间:2020/08/10 
    */ 
    `
    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
     struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
             struct ListNode*head=(struct ListNode*)malloc(sizeof( struct ListNode));
             struct ListNode*t=head;
              while(l1!=NULL||l2!=NULL){
                if(l1==NULL){
                    t->next=l2;
                    l2=l2->next;
                }
                else if(l2==NULL){
                    t->next=l1;
                    l1=l1->next;
                }
                else if(l1->val<l2->val){
                    t->next=l1;
                    l1=l1->next;
                }
                else if(l1->val>=l2->val){
                    t->next=l2;
                    l2=l2->next;
                }
                 t=t->next;
            }
            return head->next;
    }
    ``
    
    展开全文
  • 一个有序数列中插入一个数,用C语言实现链表。 输入 9 2 3 5 8 9 10 18 26 32 6 输出 2 3 5 6 8 9 10 18 26 32 代码 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; //创建一个...

    一个有序数列中插入一个数,用C语言实现链表。

    输入

    9
    2 3 5 8 9 10 18 26 32
    6

    输出

    2 3 5 6 8 9 10 18 26 32

    代码

    #include <stdio.h>
    #include <stdlib.h>
    
    //创建一个结构体用来表示链表的结点类型
    struct node {
    	int data;
    	struct node *next;
    }; 
    
    
    int main()
    {
        struct node *head,*p,*q,*t;
        int i,n,a;
        scanf("%d",&n);
        head = NULL;   //头指针为空
    	for (i = 1; i<=n; i++){//读入n个数 
    		scanf("%d",&a);
    		//动态申请一个空间,用来存放一个结点,并用临时指针p指向这个结点
    		p = (struct node *)malloc(sizeof(struct node));
    		p -> data = a;//将数据存储到当前结点的data域中 
    		p -> next = NULL;//设置当前结点的后继指针指向为空,也就是当前结点的下一个结点为空 
    		if (head == NULL){
    			head = p;//如果这是第一个结点,则将头指针指向这个结点 
    		}
    		else {
    			q->next = p;//如果不是第一个创建的结点,则将上一个结点的后继指针指向当前结点 
    		}
    		q = p;//指针q也指向当前结点 
    	}
        scanf("%d",&a);//读入待插入的数
    	t = head;//从链表头开始遍历 
    	while (t != NULL){//当没有到达链表尾的时候循环 
    		if (t->next == NULL || t->next->data > a)
    		//当前结点是最后一个结点或下一个结点的值大于a时插入 
    		{
    			p = (struct node *)malloc(sizeof(struct node));//申请内存用来存放新增的结点 
    			p->data = a;
    			p->next = t->next;//新增结点的后继指针指向当前结点的后继指针指向的结点 
    			t->next = p;//当前结点的后继指针指向新增结点 
    			break;
    		}
    		t = t->next;//继续遍历下一个结点 
    	} 
    	//输出链表中所有数 
    	t = head;
    	while (t != NULL){
    		printf("%d ",t->data);
    		t = t->next;//继续下一个结点 
    	}
        return 0;
    } 

     

    展开全文
  • 然后才头到尾遍历,复杂度是O(min(Length(a),Length(b)),下面给出实现代码,是用纯C写的链表实现,注意代码中直接采用尾插法最后一个数据会超时,因为链表尾插的时间复杂度是O(N),解决的办法是创建一个尾节点 ...
  • 两个有序单链表合成为一个有序单链表,自己写代码运行出错, 弄了很久都没解决,是我思路错了,还是代码细节出问题了?求大神帮忙 编译通过,但是运行是直接提示exe停止运行 ``` #include #include ...
  • 从txt文件中读取5 4 2 3 1 10 6 8 7 9 到数组中,建立了两个递增排序双向链表,内容分别为 1 2 3 4 5和6 7 8 9 10,现在想将两个链表合并输出一个递增双向链表,输出时少了1和6 两个数字,双向链表创建时没有...
  • C语言有序单链表的创建

    千次阅读 2018-12-16 16:59:01
    如何创建一个带头结点的有序的单链表? 链表在创建的时候就把它创建成有序的会显得专业许多(雾), 而不是先创建无序链表再排序; 拿一道典型例题举个栗子,相信你们都见过这道题; Problem Description 输入N个...
  • void CreateList(LinkList L,int n)//尾部插入法创建单链表 {<!-- -->  LinkList p;  int i;  L=(LinkList)malloc(sizeof(LNode));  L->next=NULL;  for(i=...
  • 链表的创建查看 按特定值插入链表,要求链表本身使用某种排序方法排好序。   链表的插入分四种情况: 1、原链表为空时:使头结点head指向新插入节点p_new;   2、在第一个节点前加入:使头结点head指向新...
  • 创建头结点,使用while循环依次比较两个链表的值,并改变next指向,破环原来两个链表的结构,当其中一个链表的指针域为NULL时循环结束,并使指针指向另一个链表就完成了新链表的创建。 demo (IDE:vs2017) ...
  • 链表:包含一些数据独立数据结构(通常称为节点)集合。 单链表 根指针记录链表的起始位置,根指针指向链表的第...用结构体创建一个简单节点数据结构Node typedef struct NODE { struct NODE *link; ...
  • 思路:常规方法,创建一个的链表,然后比较两个链表值得大小,进行合并 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode*...
  • C语言之合并链表

    2019-05-05 16:10:03
    条件:将两个有序的链表合并生成一个新的有序链表 第一部分: 创建链表及添加函数create 对于插入方法我选择的是头插法并且这次首次使用头指针下一个指向的才存有数据的方法. struct Data { int number; struct ...
  • 双向链表的基本操作  1.利用尾插法建立一个双向链表。  2....  3.实现双向链表中删除一个指定元素。...//创建链表的时候,因为这个实验没有要求输出链表的长度,所以我就输入了一个长度为n的链表。 #include
  • 创建一个临时头节点,头节点每次指向headA 或者 headB较小节点 当headA->data 比headB->data小时候,headA当前节点加入临时头节点,同时headA指针向后移动;否则headB加入临时头节点,同时headB指针向...
  • C语言项目实战之链表

    2019-05-08 18:42:37
    有关链表的问题大家可以看参考下面这个链接 .../*一条记录有学生姓名、学号、成绩三个数据项, ...将两个表合并成一个有序表,并打印出来。 提示: 编写创建链表函数CreateList,分别采用头插、 尾插法创建链表; ...
  • typedef struct _node{ int data;...//尾插法:创建一个递增有序的单链表 _node* last_create() { _node *head = (_node*)malloc(sizeof(_node)); head->data = 10;//带头结点,头结点dat...
  • 【问题描述】输入n个整数,创建一个双向循环链表进行存储。这些整数从第二个开始,递增有序(设a2<a3<...<an) (ai为第i个整数)。试编写程序,创建双向循环链表,依次将输入整数存储在该链表的各节点中。...
  • 输入一棵二元查找树,将该二元查找树转换成一个排序双向链表。 要求不能创建任何新结点,只调整指针指向。10 / / 6 14 / / / / 4 8 12 16转换成双向链表 4=6=8=10=12=14=16。 基本思路:中序遍历 ...
  • 2017-05-02//创建一个有序链表 #include #include <malloc.h>typedef struct Link{ int data; struct Link *next; }Node;//建立有序链表 Node *insertNode(Node *head, int b) { Node *q1=NULL, *q2=NULL, *p=
  • (2)将这两个有序单链表使用两个单链表原有空间进行合并,合并成一个有序单链表,将生成有序单链表输出显示。 实现方法 首先定义单链表结构 typedef struct node{ //单链表结构定义 int data; //数据域 ...
  • 链表是c++的一个难点,这次我为大家献上了我教程。 这也是我第一篇博客因为本人也是一位大学生,学习时间紧所以不经常发博客,此次老师留作业要做链表操作,本来链表也是难点同学们也需要理解,这次共享望大家...
  • 初始:循环输入字符与权值,创建节点,插入到链表中 形成一个包含n个节点递增单链表 然后:将第一、二两个节点从单链表中删除,然后合并形成新节点,新节点插入到有序表中,直至剩下一个节点。 可以通过递归遍历...
  • 清除线性表L中所有元素,即释放单链表L中所有结点,使之成为一个空表 *//* 5.返回单链表长度 *//* 6.检查单链表是否为空,若为空则返回1,否则返回0 *//* 7.返回单链表中第pos个结点中元素,若pos超出范围...
  • C语言单链表插入

    千次阅读 2020-07-04 17:30:28
    定义一个节点 typedef struct NODE { struct NODE *link; int value; }Node; 向有序链表中插入节点: /************************************ ** 1、找到应该插入新节点位置 ** ** 2、为新节点分配内存...
  • //中序遍历(LDR),遍历结果应该是一个从小到大的有序排列 void InOrderTraversTriTreeLDR(TriTreeNode *TriTree); //中序遍历(RDL),遍历结果是一个从大到小的有序排列 void InOrderTraversTriTreeRDL(TriTreeNode ...
  • 链表 (1)创建一个单链表(Crt_LinkList) (2)在单链表中插入一个结点(Ins_LinkList) (3)删除单链表中一个结点(Del_LinkList) (4)两个有序链表求并(Union) (5)归并两个有序链表(MergeList_...
  • 文章目录线性表单链表存储结构单链表基本操作实现创建结点单链表初始化单链表头插法单链表尾插法在给定位置,插入结点单链表头删法单链表的尾删法删除指定位置结点按值查找给定下标,查找值遍历链表销毁...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

创建一个有序的链表c语言

c语言 订阅