`
love19820823
  • 浏览: 958363 次
文章分类
社区版块
存档分类
最新评论

C# 逆转 单链表 想起我老早以前一直有的错误思想

 
阅读更多

以下代码是我从“http://blog.csdn.net/netfuns/archive/2008/04/09/2267435.aspx”copy过来的,先感谢原作者,省了写代码的时间。

记得老早以前我一直很模糊这个算法,尤其是我标黑的两行代码,最近在重新学习数据结构和算法方面的东西,就想起来了这段程序了,写出来做个自我批评吧,我之前总是以为 q = p;p = p.next;之后q也指向了p.next。因为我之前觉得对象引用一变就都变了,这就是我始终觉得这段代码不对的原因,其实呢 q = p;语句传递的是指向对象存储的指针,呵呵....希望现在不会有像我之前一样迷糊的人了....

/// <summary>
/// 模拟单链表
/// </summary>
class LinkNode
{
public object data;
public LinkNode next;

public LinkNode(object adata)
{
this.data = adata;
}
}

class LinkUtil
{
/// <summary>
/// 反转单链表,用两个辅助节点
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
public static LinkNode Inverse(LinkNode node)
{


// r,q,p 一步一步,像走路一样
// p总是指向下一个节点
//q 用来跟上p
//r 用来存储断开的节点
LinkNode r = null;
LinkNode q = null;
LinkNode p = node;

while (p != null)
{
r = q;
q = p;
p = p.next;

q.next = r;
}


return q;

}
/// <summary>
/// 打印单链表
/// </summary>
/// <param name="list"></param>
public static void PrintList(LinkNode list)
{
LinkNode p=list;
while (p != null)
{
Console.WriteLine(p.data);
p = p.next;
}
}

/// <summary>
/// 测试
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
LinkNode n1 = new LinkNode("1");
LinkNode n2 = new LinkNode("2");
LinkNode n3 = new LinkNode("3");
LinkNode n4 = new LinkNode("4");

n1.next = n2;
n2.next = n3;
n3.next = n4;
Console.WriteLine("before reverse:");
PrintList(n1);
Console.WriteLine("after reverse:");
LinkNode head= Inverse(n1);

PrintList(head);

Console.Read();


}
}

分享到:
评论

相关推荐

    c#做的单链表,单链表

    c#做的单链表,单链表,有一些东西不是特别好,看看吧

    C# 实现单链表

    本文将深入探讨如何使用C#来实现单链表,包括节点的创建、添加、删除和查找等操作。 首先,我们需要定义一个表示链表节点的类。节点通常包含两个部分:数据域(存储数据)和指针域(指向下一个节点)。在C#中,我们...

    c#实现单链表_查找插入的操作

    在C#编程中,单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的引用。本程序重点展示了如何定义单链表,并实现查找、插入和求长度的基本操作。以下是这些操作的详细...

    C#单链表图形界面

    本项目聚焦于利用C#实现一个带有图形用户界面(GUI)的单链表操作系统,允许用户直观地进行生成、增删改、倒置和清空等操作。 首先,我们来详细解释单链表。单链表是一种线性数据结构,其中每个元素(称为节点)...

    C#实现单链表的基本算法

    本项目“C#实现单链表的基本算法”旨在帮助初学者掌握链表的基本操作及其在C#中的实现。我们将探讨链表的定义、特点以及如何使用C#编写相关算法。 链表是一种动态数据结构,它不像数组那样预先分配连续的内存空间。...

    C#实现单链表的增删改查

    在本文中,我们将深入探讨如何使用C#编程语言实现单链表,并结合图形用户界面(GUI)来实现增、删、改、查等基本操作。单链表是一种基础的数据结构,它由一系列节点组成,每个节点包含数据以及指向下一个节点的引用...

    C#编程的单链表的基本操作

    单链表是数据结构中的一种基础类型,它在C#编程中被广泛应用于各种场景,如数据存储、算法实现等。单链表由一系列节点组成,每个节点包含数据元素和指向下一个节点的引用。理解并掌握单链表的基本操作对于提升C#编程...

    C#实现单链表(线性表)完整实例

    本文实例讲述了C#实现单链表(线性表)的方法。分享给大家供大家参考,具体如下: 顺序表由连续内存构成,链表则不同。顺序表的优势在于查找,链表的优势在于插入元素等操作。顺序表的例子://...

    C#控制台程序,单链表的实现

    在C#中,我们可以使用对象和类来实现单链表。本教程将详细解释如何通过C#编写一个控制台程序来实现单链表。 首先,我们需要定义一个表示链表节点的类。这个类通常包含两个属性:一个是存储数据的字段,另一个是指向...

    C#(数据结构与教程)单链表的实例应用程序

    单链表的算法及调。单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素...

    C#数据结构(顺序表,单链表,顺序表应用,冒泡排序,折半查找)

    C#作为一种面向对象的编程语言,提供了丰富的工具和库来实现各种数据结构和算法。在这个大二实验作业中,我们将关注五个主要主题:顺序表、单链表、顺序表的应用、冒泡排序以及折半查找。 首先,我们来探讨**顺序表...

    用C#实现数据结构与算法中单链表的结构

    本主题将详细探讨如何用C#实现单链表的结构,这是一种基本但实用的数据结构。 首先,我们需要理解单链表的概念。单链表是一种线性数据结构,每个元素(或称为节点)包含两部分:数据域和指针域。数据域存储实际的...

    C#winform 全局错误捕捉 可以让错误跳过去继续执行住程序

    总的来说,通过上述方法,我们可以构建一个全面的全局错误捕捉系统,确保C# WinForm应用程序在遇到错误时仍能保持稳定运行,或者至少提供给用户有意义的反馈。同时,记得在处理错误时,不仅要记录异常信息,还应考虑...

    C#编程思想(Thinking in C#)

    《C#编程思想》是一本深入探讨C#编程语言的经典著作,旨在帮助读者理解C#的核心概念、设计哲学以及在实际开发中的应用。这本书详细介绍了C#的各种特性,包括面向对象编程、泛型、异常处理、集合、多线程、反射、属性...

    c#编程思想

    这是一本非常好的C#编程方面的书(用superstar打开),无论你是门外汉,还是有一定C#编程经验的coding,你都会发现,她对你真的很有帮助!(password: xiaxia)

    数据结构 C#实现 各种算法 线性表,树,单链表

    使用C#语言实现单链表、双链表等不同类型的线性表,并探讨它们的应用场景。 - **栈和队列**:深入讲解栈和队列这两种特殊的线性表,包括它们的特点、操作方式及应用场景。例如,栈可以用于实现递归调用,队列则常...

    数据结构_顺序表_单链表_循环链表C#

    本专题主要探讨了三种基本数据结构:顺序表、单链表和循环链表,并以学生成绩管理为例,展示了它们在实际问题中的应用。下面将详细阐述这三种数据结构及其在C#语言中的实现。 首先,顺序表是一种线性数据结构,它在...

    解决C# 绑定句柄无效错误.doc

    解决 C# 绑定句柄无效错误 错误代码1058错误 内有截图

    C#编程思想pdf 非常好

    C#编程思想 中文版,详细讲述C#编程语言的主要编程思想。

Global site tag (gtag.js) - Google Analytics