首页 > 其他分享 >单向链表

单向链表

时间:2023-12-27 13:33:05浏览次数:22  
标签:Node head 单向 next 链表 88 NULL data

突然发现一直没有链表

  1 /*输入n,再输入n个(0 - 100)之间的正整数
  2 (1)    按输入次序建立单链表,并输出链表的值;(10分)
  3 (2)    对链表按值从小到大排序,并输出链表的值;(15分)
  4 (3)    删除值相同的结点,输出链表的值;(10分)
  5 (4)    将链表倒序,并输出。(5分)
  6 例如:输入 (文件名Test1.txt)
  7 13
  8 48 60 50 88 88 42 30 60 48 88 73 88 30
  9 输出
 10 48 60 50 88 88 42 30 60 48 88 73 88 30
 11 30 30 42 48 48 50 60 60 73 88 88 88 88
 12 30 42 48 50 60 73 88
 13 88 73 60 50 48 42 30*/
 14 #include <iostream>
 15 using namespace std;
 16 
 17 struct Node
 18 {
 19     int data;
 20     Node* next;
 21 };
 22 
 23 //初始化
 24 Node* InitNode()
 25 {
 26     Node *head = (Node*)malloc(sizeof(Node));
 27     if (head == NULL)   return NULL;
 28     (head)->data = 0;
 29     (head)->next = NULL;
 30     return head;
 31 }
 32 
 33 //头插法
 34 void HeadInsertNode(Node** head,int key)
 35 {
 36     Node* newnode = (Node*)malloc(sizeof(Node));
 37     newnode->data = key;
 38     newnode->next = (*head)->next;
 39     (*head)->next = newnode;
 40 }
 41 
 42 //尾插法
 43 void TailInsertNode(Node** head, int key)
 44 {
 45     Node* temp = *head;
 46     while (temp->next != NULL)
 47     {
 48         temp = temp->next;
 49     }
 50     Node* newnode = (Node*)malloc(sizeof(Node));
 51     newnode->data = key;
 52     newnode->next = NULL;
 53     temp->next = newnode;
 54 }
 55 
 56 //排序链表
 57 void SortNode(Node** head)
 58 {
 59     Node* t1;
 60     Node* t2;
 61     for (t1 = (*head)->next; t1 != NULL; t1 = t1->next)
 62     {
 63         for (t2 = t1->next; t2 != NULL; t2 = t2->next)
 64         {
 65             if (t1->data > t2->data)
 66             {
 67                 Node* t3 = (Node*)malloc(sizeof(Node));
 68                 t3->data = t1->data;
 69                 t1->data = t2->data;
 70                 t2->data = t3->data;
 71             }
 72         }
 73     }
 74 }
 75 
 76 //删除该结点
 77 void deleteNode(Node** pre)
 78 {
 79     Node* node = (*pre)->next;
 80     (*pre)->next = (*pre)->next->next;
 81     delete(node);
 82 }
 83 
 84 //删除相同元素
 85 void SameDelete(Node** head)
 86 {
 87     if ((*head)->next != NULL)
 88     {
 89         Node* nownode = (*head)->next;
 90         while (nownode != NULL)
 91         {
 92             if (nownode->next != NULL)
 93             {
 94                 if (nownode->next->data == nownode->data)
 95                 {
 96                     deleteNode(&nownode);
 97                 }
 98                 else
 99                     nownode = nownode->next;
100             }
101             else
102                 return;
103         }
104     }
105 }
106 
107 //输出链表
108 void PrintNode(Node** head)
109 {
110     if ((*head)->next != NULL)
111     {
112         Node* temp = (*head)->next;
113         while (temp != NULL)
114         {
115             cout << temp->data << " ";
116             temp = temp->next;
117         }
118         cout << endl;
119     }
120 }
121 
122 //翻转链表
123 void TurnOverNode(Node** head)
124 {
125     if ((*head)->next != NULL)
126     {
127         Node* pre;
128         Node* nownode = (*head)->next;
129         Node* nextnode = (*head)->next->next;
130         nownode->next = NULL;
131         while (nextnode != NULL)
132         {
133             pre = nownode;
134             nownode = nextnode;
135             nextnode = nextnode->next;
136             nownode->next = pre;
137         }
138         nextnode = (Node*)malloc(sizeof(Node));
139         nextnode->data = 0;
140         nextnode->next = nownode;
141         (*head) = nextnode;
142     }
143 }
144 
145 int main()
146 {
147     Node* head=InitNode();
148   
149     TailInsertNode(&head, 48);
150     TailInsertNode(&head, 60);
151     TailInsertNode(&head, 50);
152     TailInsertNode(&head, 88);
153     TailInsertNode(&head, 42);
154     TailInsertNode(&head, 30);
155     TailInsertNode(&head, 60);
156     TailInsertNode(&head, 48);
157     TailInsertNode(&head, 88);
158     TailInsertNode(&head, 73);
159     TailInsertNode(&head, 88);
160     TailInsertNode(&head, 30);
161     PrintNode(&head);
162 
163     SortNode(&head);
164     PrintNode(&head);
165 
166     SameDelete(&head);
167     PrintNode(&head);
168 
169     TurnOverNode(&head);
170     PrintNode(&head);
171 }

40分钟敲完居然没有报错!好耶

标签:Node,head,单向,next,链表,88,NULL,data
From: https://www.cnblogs.com/saucerdish/p/17930361.html

相关文章

  • 14-STM32F103+ESP8266+EC800K(移远4G Cat1)--STM32+EC800K以SSL单向认证方式连接MQTT
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/EC800K/my.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  说明安装的M......
  • 反转链表
    描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围:0≤n≤1000要求:空间复杂度O(1),时间复杂度O(n)。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。/***structListNo......
  • 反转链表指定区间
    描述将一个节点数为size链表m位置到n位置之间的区间反转,要求时间复杂度O(n),空间复杂度O(1)。例如:给出的链表为1→2→3→4→5→NULL,m=2,n=4,返回1→4→3→2→5→NULL.数据范围:链表长度0<size≤1000,0<m≤n≤size,链表中每个节点的值满足要求:时间复杂度O(n),空间......
  • 【线性表】链表
    本来要先讲数组的,介于之前已经总结过可变数组vector了,故不再开一个专题去介绍用法和原理。但是要提一嘴:数组作为数据结构可以高效地存储和查询给定索引(下标)的数据,其时间复杂度均为O(1),因为这个性质,数组可以用来模拟其他很多数据结构,但是如果要将整个数组进行移位操作,例如在中间插......
  • CSP-S 2023消消乐 字符串哈希做法and链表优化dp做法
    做完这题感觉整个人都升华了...打算说一下两种做法,字符串哈希和dp均可。dp则需要维护一个前向星去检索出第一个符合要求的位置。题解明天补,先写高数了。#include<bits/stdc++.h>#defineintlonglong#defineullunsignedlonglong#definerep(i,a,b)for(inti=(a);i<......
  • C++简单实现list链表数据结构(一)
    链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。链表的组成:链表由一系列结点组成结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域C++STL中的链表是一个双向循环链表由于链表的存储方式并不是连续的内存空......
  • 142. 环形链表Ⅱ
    给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。不允许修改链表。整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos是-1,则在该链表中没有环。......
  • c语言单链表
    #include<stdio.h>#include<stdlib.h>#defineERROR-1#defineSUCCESS0structlist_node{intdata;structlist_node*next;/*data*/};typedefstructlist_nodelink_list;intlist_get_size(link_list*list){intcount=0;......
  • 力扣234-回文链表
    难度:【简单】第一个想法是用栈,提交代码3次都显示解答错误。原因:第一次是没考虑一个节点的情况;第二次是不应该通过栈剩余元素个数判断单节点情况;第三次是没有考虑奇数个节点的情况。看官方题解,重新思考。用数组最容易解,时空复杂度都是O(n)。刚开始用栈是以为能优化到进阶的O(1)......
  • 链表
    约瑟夫问题(洛谷P1996)题目大意用Markdown写博客一年多了,最开始是用富文本写,后来发现Markdown更适合我,而且CSDN提供了导入导出的功能,图片可以云存储,所以导出了博文在本地也可以直接看,尤其是笔记类型很方便。所以这里总结一下自己常用模板和小伙伴们分享下[这里写一些为啥要整理......