美文网首页
链表分割及C#实现

链表分割及C#实现

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

问题分析

已知一个带头节点的单链表L,将比首节点大的放在首节点前面,否则放在首节点后面

算法描述

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<int> head = new Node<int>();
            Node<int> a1 = new Node<int>(3);
            Node<int> a2 = new Node<int>(2);
            Node<int> a3 = new Node<int>(1);
            Node<int> a4 = new Node<int>(4);
            Node<int> a5 = new Node<int>(5);

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

            Node<int> p = head.Next; //记录原表第一个元素节点的地址
            //拷贝首节点的值
            Node<int> h = new Node<int>();
            h.Data = p.Data;

            head.Next = null;   //将头节点的next域置空
            while (p.Next != null)
            {
                Node<int> q = p.Next; //保存下一个处理节点

                if (h.Data > p.Data)
                {
                    //插入节点后
                    p.Next = head.Next.Next;
                    head.Next.Next = p;
                }
                else
                {
                    //插入节点后
                    p.Next = head.Next;
                    head.Next = p;
                }

                p = q;
            }

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

相关文章

  • 链表分割及C#实现

    问题分析 已知一个带头节点的单链表L,将比首节点大的放在首节点前面,否则放在首节点后面 算法描述 Node类 Pr...

  • C# 链表

    链表介绍 Unity 用C#写的链表类 简述链表和数组的区别 Unity--链表实现贪吃蛇

  • 静态链表及C#实现

    静态链表 静态链表是用数组模拟动态链表。 静态链表结构描述 首先,静态链表使用数组来模拟动态链表。数组存放一个节点...

  • 单链表及C#的实现

    链表结构如下: C#代码实现如下: Node类 实现节点,包括节点中的数据域和指针域。 IListDs接口 规定链...

  • 双向链表及C#的实现

    双向链表图解 程序实现 下面的实现中没有使用头节点(即头节点就是首节点) Node类 DoubleList类 Pr...

  • Redis数据结构学习-链表(二)

    链表 链表提供了高效的节点重排能力, 及顺序性节点访问方式, Redis构建了自己的链表实现 链表和链表节点的实现...

  • 单向循环链表及C#的实现

    循环链表 循环链表是指链表的尾节点的Next指针域指向头节点。循环链表判空条件,头节点的后继指向自己。 代码实现 ...

  • 链表及链表实现栈

  • 链表分割

    题目来源: 牛客网--程序员面试金典 题目描述 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在...

  • python链表及算法

    实现了python单向链表及一些算法题

网友评论

      本文标题:链表分割及C#实现

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