Ejemplo n.º 1
0
        /// <summary>
        /// 在给定的单链表中删除所有等于target的值的节点
        /// </summary>
        /// <param name="linkList"></param>
        /// <param name="target"></param>
        public static MyLinkNode DeleteTargetByValue(MyLinkNode linkList, int target)
        {
            if (linkList != null)
            {
                MyLinkNode p = linkList;

                if (linkList.Data == target)
                {
                    linkList = linkList.Next;
                }

                while (p.Next != null)
                {
                    if (p.Next.Data == target)
                    {
                        p.Next = p.Next.Next;
                    }
                    else
                    {
                        p = p.Next;
                    }
                }
            }

            return(linkList);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 在已知的单链表linklist里面,删除目标节点node
        /// </summary>
        /// <param name="linkList"></param>
        /// <param name="node"></param>
        public static MyLinkNode DeleteTarget(MyLinkNode linkList, MyLinkNode node)
        {
            if (linkList != null && node != null)
            {
                // 如果待删除节点是第一个节点,并且链表不带头节点
                // 我们要做特殊处理
                if (linkList == node)
                {
                    linkList = linkList.Next;
                }
                else
                {
                    MyLinkNode p = linkList;

                    while (p != null && p.Next != node)
                    {
                        p = p.Next;
                    }

                    ///说明我们找到了目标节点
                    if (p.Next == node)
                    {
                        p.Next = p.Next.Next;
                    }
                }
            }

            return(linkList);
        }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            MyLinkNode node1 = new MyLinkNode()
            {
                Data = 1
            };
            MyLinkNode node2 = new MyLinkNode()
            {
                Data = 2
            };
            MyLinkNode node3 = new MyLinkNode()
            {
                Data = 3
            };
            MyLinkNode node4 = new MyLinkNode()
            {
                Data = 4
            };
            MyLinkNode node5 = new MyLinkNode()
            {
                Data = 4
            };
            MyLinkNode node6 = new MyLinkNode()
            {
                Data = 5
            };
            MyLinkNode node7 = new MyLinkNode()
            {
                Data = 6
            };

            node1.Next = node2;
            node2.Next = node3;
            node3.Next = node4;
            node4.Next = node5;
            node5.Next = node6;
            node6.Next = node7;

            // node1.VisitFromBack();
            // MyLinkNode.VisitFromBackNByN(node1);

            //var node = MyLinkNode.DeleteTarget(node1, node3);
            // node.Visit();

            node1.Visit();

            var node = MyLinkNode.DeleteTargetByValue(node1, 1);

            node.Visit();

            MyLinkNode.DeleteTargetByValue(node1, 4);
            node1.Visit();
        }
Ejemplo n.º 4
0
        public void Visit()
        {
            MyLinkNode p = this;

            while (p != null)
            {
                Console.Write(p.Data + "=>");
                p = p.Next;
            }

            Console.WriteLine();
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 倒序打印单链表 - N*N复杂度
        /// </summary>
        /// <param name="node"></param>
        public static void VisitFromBackNByN(MyLinkNode node)
        {
            if (node != null)
            {
                MyLinkNode end = null;
                MyLinkNode p   = node;

                while (end != node)
                {
                    p = node;

                    while (p.Next != end)
                    {
                        p = p.Next;
                    }
                    Console.Write(p.Data + "=>");
                    end = p;
                }
            }
        }