예제 #1
0
        //显示单链表
        public void DisplayLinkList()
        {
            LinkListNode currentNode = Head;

            while (currentNode != null)
            {
                Console.WriteLine(currentNode.Data);
                currentNode = currentNode.Next; //遍历单链表
            }
        }
예제 #2
0
 //单链表添加结点 - 头部插入, 单链表顺序反过来了
 public void AddNodeToLinkListFromHead(LinkListNode node)
 {
     if (Head == null)
     {
         Head = node;
         Length++;
         return;
     }
     else
     {
         node.Next = Head;
         Head      = node;
         Length++;
     }
 }
예제 #3
0
        //判断是否有环
        public bool HasCycle(LinkListNode head)
        {
            LinkListNode fast = head;
            LinkListNode slow = head;

            while (slow != null && fast.Next != null)
            {
                slow = slow.Next;
                fast = fast.Next.Next;
                if (slow == fast)
                {
                    return(true);
                }
            }
            return(false);
        }
예제 #4
0
        //查找操作- 根据索引查找 - 实现2
        public LinkListNode GetNodeByIndex2(int index)
        {
            if (index < 0 || index > Length)
            {
                throw new Exception("Index out of bound");
            }
            else
            {
                LinkListNode tmpNode = head;
                for (int i = 0; i < index; i++)
                {
                    tmpNode = tmpNode.Next;
                }

                return(tmpNode);
            }
        }
예제 #5
0
 //查找操作- 根据索引查找 - 实现1
 public LinkListNode GetNodeByIndex(int index)
 {
     if (index < 0 || index > Length)
     {
         throw new Exception("Index out of bound");
     }
     else
     {
         LinkListNode tmpNode = Head;
         for (int i = 0; i < Length; i++, tmpNode = tmpNode.Next)
         {
             if (i == index)
             {
                 return(tmpNode);
             }
         }
         return(null);
     }
 }
예제 #6
0
 //给单链表添加结点 - 尾部插入
 public void AddNodeToLinkList(LinkListNode node)
 {
     //先判断当前链表是否非空
     if (Head == null)
     {
         Head = node;
         Length++;
         return;
     }
     else
     {
         LinkListNode currentNode = Head;
         while (currentNode.Next != null)
         {
             currentNode = currentNode.Next; //遍历这个单链表,直到currentNode到达最后一个结点
         }
         currentNode.Next = node;            //将要加入的node加入到链表的结尾,即将最后一个节点的指针域指向新节点
         Length++;
     }
 }
예제 #7
0
        //移除某个节点只需将其之前的节点的Next指针指向要移除节点的后一个节点即可
        public void DeleteNodeAt(int index)
        {
            if (index == 0)
            {
                head = Head.Next;
            }
            else
            {
                LinkListNode preDeleteNode = this.GetNodeByIndex(index - 1);
                if (preDeleteNode.Next == null)
                {
                    throw new Exception("Index out of bound");
                }

                LinkListNode deleteNode = preDeleteNode.Next;
                preDeleteNode.Next = deleteNode.Next;
                deleteNode         = null;
            }

            length--;
        }
예제 #8
0
        //单链表翻转
        public LinkListNode ReverseLinkList(LinkListNode head)
        {
            if (head == null || head.Next == null)
            {
                return(head);
            }

            LinkListNode nextNode    = null;
            LinkListNode preNode     = null;
            LinkListNode currencNode = head;

            while (currencNode != null)
            {
                //currencNode.setNext(preNode); //将当前node的next域指向preNode
                currencNode.Next = preNode;
                preNode          = currencNode; //移动指针,下一个操作preNode
                currencNode      = nextNode;
            }

            return(preNode);
        }
예제 #9
0
 //Title: 单链表删除中间节点
 //实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。
 // 思路: 方法是用要删除节点的下一个位置,去替代要删除的节点
 public void DeleteMiddleNode(LinkListNode linkList, LinkListNode node)
 {
     node.Next = node.Next.Next;
     node.Data = node.Next.Data;
 }
예제 #10
0
 public void setNext(LinkListNode next)
 {
     Next = next;
 }
예제 #11
0
 public LinkListNode()
 {
     Data = 0;
     Next = null;
 }
예제 #12
0
 public LinkListNode(LinkListNode node)
 {
     Next = node;
 }
예제 #13
0
 public DLinkListActionDemo(LinkListNode headNode)
 {
     Head = headNode;
 }
예제 #14
0
 // 删除中间节点, 思路: 方法是用要删除节点的下一个位置,去替代要删除的节点
 public void DeleteMiddleNode(DLinkListActionDemo linkList, LinkListNode node)
 {
     node.Next = node.Next.Next;
     node.Data = node.Next.Data;
 }