C#反转单链表简单实例

今天说一下反转单链表的简单实例,展示的是核心代码部分,后端用。结合我查询的时候遇到的一些问题,给大家梳理一下。

最下面是在力扣做题时的代码,实现的是单链表反转,如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。

首先我们明确一下单链表的在数据库里存储的结构,如下图:
在这里插入图片描述链表结构要点:

  1. 头指针表明了链表的起点,可以唯一确定一个单链表。 头指针指向的是链表的第一个结点,其指针域储存的是第一个结点在内存中的位置。

  2. 头结点是单链表的第一个结点,若单链表有头结点,则头指针指向头结点,若单链表没有头结点,则头指针指向第一个结点。

  3. 一个单链表可以没有头结点,但是不能没有头指针。 头结点的数据域可以不储存任何数据。

    单链表是链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。这组存储单元既可以是连续的,也可以是不连续的。

    链表中的数据是以结点来表示的,每个结点的构成:data(数据元素的值) + next(指示后继元素存储位置),简单来说,现在已知有两个宝箱,你知道data就是存东西的第一个宝箱,next就是这个宝箱旁边的纸条,告诉你下一个宝箱在哪里。

关于单链表反转代码的过程,我找到一张很形象的图,方便我们理解:由@De梦提供
在这里插入图片描述

/*
public class ListNode
{
    public int val;			//定义数据域
    public ListNode next;	//定义指针域
    public ListNode (int x)	//
    {
        val = x;
    }
//上面这块这个部分是定义的ListNode,因为c#没有指针,这个定义之后当指针用
}*/
public class Solution {
    public ListNode ReverseList(ListNode head) {
        // pre指针,指向反转后的节点
        ListNode pre = null;
         //头节点指针
        ListNode cur = head;
        //迭代
        while(cur!=null){
            //Cur_next 节点,永远指向当前节点cur的下一个节点
            ListNode Cur_next = cur.next;
            //反转的关键:当前的节点指向其前一个节点(注意这不是双向链表,没有前驱指针)
            cur.next = pre;
            //更新pre
            pre = cur;
            //更新当前节点指针
            cur = Cur_next ;
        }
        //pre是反转之后的头节点
        return pre;
    }
}

有问题希望指出,谢谢各位。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值