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


    题目描述

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

    一 . 概念普及

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

    二 . 实现方法

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

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

            代码实现:

    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;
        }

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

            代码实现:

    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;
        }
    }

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

  • 相关阅读:
    4. Git撤销修改
    3. Git如何管理修改
    2. Git的工作区、暂存区和版本库
    1. Git创建仓库、查看工作区状态
    微信平台接入Web页面功能接口(C#)
    Python之路【第六篇】:Python运算符
    Python之路【第五篇】:Python基本数据类型
    Python之路【第四篇】:Pycharm集成开发环境
    Python之路【第二篇】:Python简介、解释器与编码
    Python之路【第七篇】:Python流程控制
  • 原文地址:https://www.cnblogs.com/WeiMLing/p/10889213.html
Copyright © 2020-2023  润新知