美文网首页
带头节点链表的就地逆置及C#的实现

带头节点链表的就地逆置及C#的实现

作者: 周末的游戏之旅 | 来源:发表于2019-08-01 09:58 被阅读0次

问题分析

逆置就是使得表中得内容由原来的
(a1,a2,...,ai-1,ai,ai+1,...,an)变为
(an,an-1,...,ai+1,ai,ai-1,...,a1)

就地逆置就是不需要额外申请节点空间,只需要利用原有表中的节点空间

算法思路

用头插法完成

初始化

逆置链表L初始为空链表,指针p指向原表当前处理节点

头插法

依次取原链表中当前节点p,将其作为第一个结点插入到逆置链表L表头L->next=p,q为保存原链表当前节点的下一个处理位置q=p->next

算法描述

Node类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinkReverse
{
    class Node<T>
    {
        private T data; //数据域
        private Node<T> next;  //引用域

        public T Data { get => data; set => data = value; }
        internal Node<T> Next { get => next; set => next = value; }

        /// <summary>
        /// 构造器
        /// </summary>
        public Node()
        {
            Data = default(T);
            Next = null;
        }

        /// <summary>
        /// 构造器
        /// </summary>
        /// <param name="data"></param>
        public Node(T data)
        {
            this.Data = data;
        }
    }
}

Program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinkReverse
{
    class Program
    {
        static void Main(string[] args)
        {
            Node<string> head = new Node<string>();
            Node<string> a1 = new Node<string>("a1");
            Node<string> a2 = new Node<string>("a2");
            Node<string> a3 = new Node<string>("a3");

            head.Next = a1;
            a1.Next = a2;
            a2.Next = a3;

            Node<string> p = head.Next; //记录原表第一个元素节点的地址
            head.Next = null;   //将头节点的next域置空
            while (p != null)   
            {
                Node<string> q = p.Next; //保存下一个处理节点
                
                //插入节点
                p.Next = head.Next; 
                head.Next = p;

                p = q;
            }
            
            //遍历
            while (head.Next != null)
            {
                head = head.Next;
                Console.WriteLine(head.Data);
            }

        }
    }
}

相关文章

  • 带头节点链表的就地逆置及C#的实现

    问题分析 逆置就是使得表中得内容由原来的(a1,a2,...,ai-1,ai,ai+1,...,an)变为(an,...

  • 王道数据结构练习

    练习2.5 //试编写算法将带头结点的单链表就地逆置#include #include #include u...

  • 将链表L就地逆置,即利用原表各结点的空间实现逆置

    一、题目 将链表L就地逆置,即利用原表各结点的空间实现逆置。 二、思路 在链表的第二个元素开始执行逆置,因为如果链...

  • LeetCode—— 反转链表

    题目描述 一、CPP 解题思路:链表逆序首先想到的方法就是头插法,下面实现代码中,新建了两个节点,进行就地逆置。一...

  • 单链表翻转

    单链表的就地逆置:就地逆置即空间复杂度为O(1)一:用数组存储单链表的值,然后重新逆序赋值,效率较低。二:利用三个...

  • 链表就地逆置

  • 单链表就地转置

    试写一道算法,实现单链表的就地逆置(反转),即利用原表的存储空间将线性表(a1,a2,⋯an)逆置(反转)为(an...

  • 单向链表反转算法

    常用的4种: 迭代反转法 递归反转法 头插法 就地逆置法 1 迭代反转法 从当前链表的首元节点开始,一直遍历至链表...

  • 插入任意数据形成有序单链表并逆置单链表

    可直接运行的完整C语言版有序单链表的生成和逆置标签:数据结构、线性表、带头结点的单链表、逆置单链表欢迎与喜欢数据结...

  • 1.链表

    主要内容 包含题目: 链表基础知识: 上页的答案: 题目 例1 链表逆序 206 easy 方法一 就地逆置法 方...

网友评论

      本文标题:带头节点链表的就地逆置及C#的实现

      本文链接:https://www.haomeiwen.com/subject/bmnfdctx.html