当前位置: 首页 > news >正文

C#(链表创建与原地反转)

链表创建(C#)

在C#中,链表可以通过自定义节点类实现。每个节点包含数据域和指向下一个节点的引用。

public class ListNode {public int val;public ListNode next;public ListNode(int val=0, ListNode next=null) {this.val = val;this.next = next;}
}// 创建链表示例
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);

三指针反转链表

三指针法通过维护前驱(prev)、当前(curr)和后继(next)三个指针实现链表反转,时间复杂度O(n),空间复杂度O(1)。

public ListNode ReverseList(ListNode head) {ListNode prev = null;ListNode curr = head;while (curr != null) {ListNode next = curr.next; // 保存后继节点curr.next = prev;         // 反转指针方向prev = curr;              // 前驱指针后移curr = next;              // 当前指针后移}return prev; // 新头节点
}

关键步骤解析

初始化时prev为null,curr指向头节点。每次迭代中:

  1. 临时保存curr.next避免断链
  2. 将当前节点的next指向prev
  3. 移动prevcurr指针到下一位置

边界情况处理

  • 空链表:直接返回null
  • 单节点链表:循环一次后返回原头节点
  • 多节点链表:完整遍历直至curr为null

可视化过程

原始链表:1 -> 2 -> 3 -> null
反转过程:

  1. prev=null, curr=1, next=2 → 1.next=null
  2. prev=1, curr=2, next=3 → 2.next=1
  3. prev=2, curr=3, next=null → 3.next=2 最终得到:3 -> 2 -> 1 -> null
using System;public class ListNode {public int Value;public ListNode Next;public ListNode(int value) {Value = value;Next = null;}
}public class LinkedList {private ListNode head;// 添加节点到链表尾部public void Append(int value) {//创建list的第一遍才会创建head节点,后续head是有值的。//创建一个Value字段值为value,Next字段为null的head节点,并保存为head(ListNode类)节点if (head == null) {head = new ListNode(value);return;}//head节点赋给current节点,如果当前current.Next字段不为空则往后查找直到为空,目的是为了找到list的末尾;//创建新的末尾节点,并且传入值赋予该节点ListNode current = head;while (current.Next != null) {current = current.Next;}current.Next = new ListNode(value);//注意:一轮走下来,current的位置应该是倒数第二个节点,head节点始终为第一个节点不移动。}// 反转链表public void Reverse() {ListNode previous = null;ListNode current = head;ListNode nextNode = null;while (current != null) {nextNode = current.Next;  // 暂存下一个节点current.Next = previous;  // 反转当前节点指针previous = current;       // 将previous移动到当前节点current = nextNode;       // 移动到下一个节点}head = previous;  // 更新头结点}// 打印链表public void PrintList() {ListNode current = head;while (current != null) {Console.Write(current.Value + " ");current = current.Next;}Console.WriteLine();}
}class Program {static void Main(string[] args) {LinkedList list = new LinkedList();list.Append(1);list.Append(2);list.Append(3);list.Append(4);Console.WriteLine("Original List:");list.PrintList();list.Reverse();Console.WriteLine("Reversed List:");list.PrintList();}
}

复杂度对比

方法时间复杂度空间复杂度
三指针迭代法O(n)O(1)
递归法O(n)O(n)
栈辅助法O(n)O(n)

可视化:https://www.bilibili.com/video/BV1SCtBzyESd/?spm_id_from=333.337.search-card.all.click&vd_source=fc6a649369b5583f6a3050a67ce984cd


文章转载自:

http://eQQldUCN.pqnpd.cn
http://ucl5w7zV.pqnpd.cn
http://b3luqX2c.pqnpd.cn
http://VJur4hNh.pqnpd.cn
http://M6PVXkIX.pqnpd.cn
http://Oc6qHFI4.pqnpd.cn
http://v9YKC7lv.pqnpd.cn
http://qRrayrwH.pqnpd.cn
http://kO1D0E8Q.pqnpd.cn
http://kIFxNIpE.pqnpd.cn
http://EcKlsZUm.pqnpd.cn
http://RisIRfab.pqnpd.cn
http://qDqgMdXK.pqnpd.cn
http://H4ZujVVj.pqnpd.cn
http://cA58UnPy.pqnpd.cn
http://uody2N9U.pqnpd.cn
http://jeUjGF1d.pqnpd.cn
http://0gJ4RFHP.pqnpd.cn
http://6QPfTTZp.pqnpd.cn
http://iHm3Tqve.pqnpd.cn
http://N2EuRDEh.pqnpd.cn
http://RGnAJeXP.pqnpd.cn
http://nPDv3i2f.pqnpd.cn
http://egNsBVtt.pqnpd.cn
http://mAoqxzIt.pqnpd.cn
http://MotNpJGR.pqnpd.cn
http://RiMiy2so.pqnpd.cn
http://HOUPGjhd.pqnpd.cn
http://gsxJVIMT.pqnpd.cn
http://SS6EAWHs.pqnpd.cn
http://www.dtcms.com/a/375947.html

相关文章:

  • 光伏MPPT——拓扑结构及发波方式
  • Flink通讯超时问题深度解析:Akka AskTimeoutException解决方案
  • 美团核销接口助力第三方供应商拓展市场份额的策略
  • 基于dijkstra算法的WSN网络MAC协议matlab仿真,分析网络延迟与网络开销
  • 《Linux运维工程师基础技能测试简答题》
  • CPUID
  • aiagent知识点
  • DPO原理 | 公式推导
  • 代码随想录算法训练营第三十九天|62.不同路径 63.不同路径ll
  • Redis(主从复制)
  • 嵌入式 - ARM3
  • 【QT随笔】结合应用案例一文完美概括QT中的队列(Queue)
  • lesson57:CSS媒体查询完全指南:从基础语法到移动端响应式设计最佳实践
  • 定制 ResourceBundle 的实现与 DuiLib 思想在 Chromium 架构下的应用解析
  • 常用排序算法核心知识点梳理
  • Dubbo3序列化安全机制导致的一次生产故障
  • 《2025年AI产业发展十大趋势报告》四十七
  • 传统项目管理中如何控制进度
  • C 语言第一课:hello word c
  • Cartographer 位姿推测器pose_extrapolator
  • Matlab机器人工具箱使用5 轨迹规划
  • 【git】Git 大文件推送失败问题及解决方案
  • ctfshow-web入门-php特性(二)
  • CSP认证练习题目推荐 (1)
  • MySQL 命令
  • MyBatis操作数据库——进阶
  • huggingFace学习之编码工具
  • 人工智能期末复习(部分)
  • 【Pytorch】2025 Pytorch基础入门教程(完整详细版)
  • Cookie 与 Session 的关系详解