链表插入(线性表)
2022/1/12 23:04:22
本文主要是介绍链表插入(线性表),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
刚接触链表,有点迷糊,昨天和前天看视频看博客拼拼凑凑学了创建链表打印链表和插入节点什么的,之前写的被注释在后面了,还是请教学姐修改了很多才勉强把这道题弄出来。
放代码:
#include<stdio.h> #include<stdlib.h> //提供malloc()和free() #include<string.h> //提供strcpy()等 struct Node { int data; //数据域 struct Node* next; //指针域(指向节点的指针) }; struct Node* head; struct Node* newNode; int main() { void CreateLinkList(); void DeleteListHead(); void FindNode(); void PrintLinkList(); CreateLinkList(); DeleteListHead(); FindNode(); PrintLinkList(); return 0; } int n; void CreateLinkList()//创建新链表 { scanf("%d",&n);//输入单链表的长度 struct Node *q,*tail; for(int i=0; i<n; i++) { //q=new Node; q=(struct Node*)malloc(sizeof(struct Node)); q->next=NULL; scanf("%d",&(q->data)); /* 分类讨论,头节点和其他节点 */ if(i==0){ head=q; tail=q; }else{ tail->next=q; tail=q; } } } void PrintLinkList()//打印修改后的链表 { struct Node *p; //p=head->next; p=head; while(p) { printf("%d ",p->data); p=p->next;//指针移动到下个元素的首地址 } printf("\n"); } void DeleteListHead()//删除第一个结点 { /* 删除节点,不能直接newNode->next=NULL,除非放在head=head->next;后面, 才不会影响head指针的指向 */ newNode = (struct Node*)malloc(sizeof(struct Node));//申请动态内存 //newNode->data = head->data; newNode=head; head=head->next;//头的第二个节点变成新的头 newNode->next=NULL; //free(newNode);//删除第一个结点 } void FindNode()//遍历,插入第一个节点到适当位置 { struct Node *pCurrent = head;//定义一个辅助指针变量 while(pCurrent!=NULL) { //分类讨论 /* 1、头节点比要插入节点数字大 2、末尾节点比要插入节点大 3、其他情况 */ if(head->data>newNode->data){ newNode->next=head; head=newNode; break; }else if(pCurrent->next==NULL){ pCurrent->next = newNode; break; } else if(newNode->data >= pCurrent->data&&newNode->data<=pCurrent->next->data)//插入 { newNode->next = pCurrent->next; pCurrent->next = newNode; break; } pCurrent = pCurrent->next; } } /* #include<stdio.h> #include<stdlib.h> //提供malloc()和free() #include<string.h> //提供strcpy()等 struct Node { int data; //数据域 struct Node* next; //指针域(指向节点的指针) }; struct Node* head; struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));//申请动态内存 void CreateLinkList(int n); void DeleteListHead(); struct Node* FindNode(); void PrintLinkList(); int main() { void CreateLinkList(); void DeleteListHead(); struct Node* FindNode(); void PrintLinkList(); return 0; } int n; void CreateLinkList()//创建新链表 { scanf("%d",&n);//输入单链表的长度 struct Node *q,*tail; for(int i=0;i<n;i++) { q=new Node; q->next=NULL; scanf("%d",&q->data); tail->next=q; tail=q; } newNode = head; newNode->next = NULL; } void PrintLinkList()//打印修改后的链表 { struct Node *p; p=head->next; while(p) { printf("%d",p->data); p=p->next;//指针移动到下个元素的首地址 } printf("\n"); } void DeleteListHead()//删除第一个结点 { head=head->next;//头的第二个节点变成新的头 free(newNode);//删除第一个结点 } struct Node* FindNode()//遍历,插入第一个节点到适当位置 { struct Node *pCurrent = &head;//定义一个辅助指针变量 for(int i=0;i<n;i++) { if(newNode > pCurrent->data)//插入 { newNode->next = pCurrent->next; pCurrent->next = newNode; } else { pCurrent = pCurrent->next; } } } 1523: 链表插入(线性表) 时间限制:1s 内存限制:128MB 题目描述 (线性表)已知一单链表,从第二个结点至表尾递增有序, (设a1<x<an)如下图(“第二个结点至表尾”指a1..an )。 试编写程序,将第一个结点删除并插入表中适当位置,使整个链表递增有序。 输入格式 输入长度n:7 输入数据:4 1 2 3 6 8 9 输出格式 1 2 3 4 6 8 9 样例输入 5 11 7 8 9 10 样例输出 7 8 9 10 11 */
这篇关于链表插入(线性表)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?