前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指Offer的学习笔记(C#篇)-- 反转链表

剑指Offer的学习笔记(C#篇)-- 反转链表

作者头像
WeiMLing
发布2022-05-06 16:12:16
3380
发布2022-05-06 16:12:16
举报
文章被收录于专栏:WeiMLing

题目描述

输入一个链表,反转链表后,输出新链表的表头。

一 . 概念普及

        关于线性表等相关概念请点击这里

二 . 实现方法

        目前,可以有两种方法实现该要求。

        方法一:借助外部空间实现。这里可以将单链表储存为数组,然后按照数组的索引逆序进行反转。此处,可理解为将链表装换为顺序表,然后把队伍方向反转,但是,此方式比较浪费空间,而且需要两次遍历,效率不占优势。

        代码实现:

代码语言:javascript
复制
public static Node ReverseList1(Node head)
    {
         //指针是否为空判断(鲁棒性)
        if(head == null)
        {
            return null;
        }
         //定义新的链表nodeList
        List<Node> nodeList = new List<Node>();
        //当head不为空时,执行
        while (head != null)
        {
            nodeList.Add(head);
            head = head.Next;
        }
        //
        int startIndex = nodeList.Count - 1;
        for (int i = startIndex; i >= 0; i--)
        {
            Node node = nodeList[i];
            if (i == 0)
            {
                node.Next = null;
            }
            else
            {
                node.Next = nodeList[i - 1];
            }
        }
        // 现在头结点是原来的尾节点
        head = nodeList[startIndex];
        return head;
    }

        方法二:三指针法,不做过多阐述,代码备注蛮详细的。下图即为具体实现过程。

        代码实现:

代码语言:javascript
复制
class Solution
{
    public ListNode ReverseList(ListNode pHead)
    {
        // write code here
        //鲁棒判定
        if(pHead == null)
        {
            return null;
        }
        //定义A B 两个指针
        ListNode A = null;
        ListNode B = null;
        //循环操作
        while(pHead != null)
        {
            //定义B为PHead后面的数,定义A为pHead前面的数
            B = pHead.next;
            pHead.next = A;  //这一部分就理解成A是PHead前面的那个数吧。
            //然后再把A和pHead都提前一位
            A = pHead;
            pHead = B;
        }
        //循环结束后,返回新的表头,即原来表头的最后一个数。
        return A;
    }
}

        当然,用递归也能实现哦。该题鲁棒判断在于指针是否为空。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
    • 输入一个链表,反转链表后,输出新链表的表头。
      • 一 . 概念普及
        • 二 . 实现方法
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档