首页 > 其他分享 >单链表(双指针)

单链表(双指针)

时间:2023-06-19 10:45:29浏览次数:31  
标签:Node head 单链 cur new NULL pNext 指针

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct Node{
    int value;
    struct Node *pNext;
} Node;

/* 打印链表 */
void show_data(Node *head) { if (head == NULL) { return; } Node* cur = head; while (cur) { printf("%d ", cur->value); cur = cur->pNext; } printf("\n"); }
/* 创建链表 */ Node* creatNode_New(int data) { Node* new = (Node*)malloc(sizeof(Node)); new->value = data; new->pNext = NULL; return new; }
/* 反转链表 */ Node* revertNode(Node* head) { Node* cur = head; Node* next = NULL; while (cur != NULL) { Node* tmp = cur; cur = cur->pNext; tmp->pNext = next; next = tmp; } return next; }
/* 插入链表_表头 */ void insertNode_Front(Node** head, Node* new) { if (head == NULL) { *head = new; } else { new->pNext = *head; *head = new; } }
/* 插入链表_表尾 */ void insertNode_Back(Node** head, Node* new) { if (head == NULL) { *head = new; } else { Node* tmp = *head; while (tmp->pNext != NULL) { tmp = tmp->pNext; } tmp->pNext = new; } }
/* 统计链表长度 */ int GetNodeSize(Node* head) { if (head == NULL) { return 0; } int size = 0; Node* cur = head; while (cur) { size++; cur = cur->pNext; } printf("size:%d\n", size); return size; }
/* 删除链表_表头 */ void deleteNode_Front(Node** head) { if (*head == NULL) { return; } else { if ((*head)->pNext == NULL) { free(*head); *head = NULL; } else { Node* cur = *head; *head = (*head)->pNext; free(cur); } } }
/* 删除链表_表尾 */ void deleteNode_Back(Node** head) { if (*head == NULL) { return; } else { if ((*head)->pNext == NULL) { free(head); head = NULL; } else { Node* cur = *head; Node* pre = NULL; while (cur->pNext) { pre = cur; cur = cur->pNext; } free(cur); pre->pNext = NULL; } } }
/* 清空链表 */
void cleanNodeList(Node** head) { Node* cur = *head; while (cur) { Node* tmp = cur; cur = cur->pNext; free(tmp); } *head = NULL; } int main(void) { Node* head = NULL; Node* revNode = NULL; for (int i = 1; i < 10; i++) { insertNode_Front(&head, creatNode_New(i)); } GetNodeSize(head); show_data(head); revNode = revertNode(head); show_data(revNode); deleteNode_Front(&revNode); show_data(revNode); deleteNode_Back(&revNode); show_data(revNode); cleanNodeList(&revNode); show_data(revNode); return 0; }

 

标签:Node,head,单链,cur,new,NULL,pNext,指针
From: https://www.cnblogs.com/wangchaoguo-li/p/17378191.html

相关文章

  • transform (牛客多校) (双指针+二分+ 中位数妙用+前缀和相减维护)
    题目大意:n个商店在一条直线上, 有一个xi然后有ai个商品你可以把商店的物品移动到另一个商店,代价为:abs(xi-xj)在代价不超过T的情况下你可以选择一个商店来让其他商店的物品都移到这个商店,问最多移动多少个物品  思路:双指针维护一个最大的区间,因......
  • C语言:指针
    1、指针简单介绍#include<stdio.h>intmain(void){int*p;//p是变量的名字,int*表示p变量存放的是int类型的地址(指针变量)/*int*p应该理解为p是变量名,p变量数据类型是int*类型,实际即使存放的是int变量地址的类型指针就是一个操作......
  • C++面试八股文:聊一聊指针?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第17面:面试官:聊一聊指针?二师兄:好的。面试官:你觉得指针本质上是什么?二师兄:这要从内存地址开始说起了。如果有一块容量是1G的内存,假设它的地址是从0x00000000到0x3fffffff,每一个字节都对应一个地址。当我们声明一个变量并初始化它......
  • C++面试八股文:聊一聊指针?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第17面:面试官:聊一聊指针?二师兄:好的。面试官:你觉得指针本质上是什么?二师兄:这要从内存地址开始说起了。如果有一块容量是1G的内存,假设它的地址是从0x00000000到0x3fffffff,每一个字节都对应一个地址。当我们声明一个变量并初始化......
  • 【基础算法】单链表的OJ练习(5) # 环形链表 # 环形链表II # 对环形链表II的解法给出证
    前言本章的OJ练习相对于OJ练习(4)较为简单。不过,本章的OJ最重要的是要我们证明为何可以这么做。这也是==面试==中常出现的。对于OJ练习(4):==->==传送门==<-==,分割链表以一种类似于归并的思想解得,回文链表以一种巧妙复用前面OJ题的思想解得。啰嗦一下:对于本章,最重要的是......
  • 逍遥自在学C语言 | 指针的基础用法
    前言在C语言中,指针是一项重要的概念,它允许我们直接访问和操作内存地址。可以说,指针是C语言一大优势。用得好,你写程序如同赵子龙百万军中取上将首级;用得不好,则各种问题层出不穷,有种双拳难敌四手的感觉。本文将介绍指针的基础知识,包括指针的定义、初始化、访问和运算。一、人物......
  • 浅谈C语言指针的运用(函数与指针、数组与指针)
    1.函数与指针一个函数在编译以后会占用一定的内存,在c语言中函数一般是在栈里面,而函数名就是函数在栈中的首地址。那么接下来会讲解如何通过指针调用函数呢?用指针调用函数我们称为函数指针,指针作为一种数据类型,它指向或引用内存中的数据,那么指针同样可以用来存储函数地址(起始地址......
  • 浅谈 .NET 中的对象引用、非托管指针和托管指针
    目录前言一、对象引用二、值传递和引用传递三、初识托管指针和非托管指针四、非托管指针1、非托管指针不能指向对象引用2、类成员指针五、托管指针 前言#本文主要是以C#为例介绍.NET中的三种指针类型(本文不包含对于函数指针的介绍):对象引用、非托管指针、......
  • 【LeetCode双指针】合并两个有序数组,从后向前遍历
    合并两个有序数组https://leetcode.cn/problems/merge-sorted-array/给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数......
  • [C语言/PTA] 单链表结点删除
    题目要求本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下:structListNode{intdata;ListNode*next;};函数接口定义:structListNode*readlist();structListNode*deletem(structListNode*L,intm);......