单链表排序


     
  
   class LinkNode
    {
        private LinkNode _next;

        internal LinkNode Next
        {
            get { return _next; }
            set { _next = value; }
        }

        private int _data;

        public int Data
        {
            get { return _data; }
            set { _data = value; }
        }

        public LinkNode()
        { }

        public LinkNode(int data)
        {
            _data = data;
        }

        public LinkNode(int data, LinkNode next)
        {
            _data = data;
            _next = next;
        }
    }
   static LinkNode SortLink(LinkNode head)
        {

            LinkNode current = head.Next;
            LinkNode next = null;
            LinkNode prevCurr = head, prevNext = head.Next;
            
            while (current != null)
            {
                next = current.Next;
                while (next != null)
                {
                    if (current.Data > next.Data)
                    {
                        LinkNode tmp = null;
                        if (current.Next == next) //key:当两个腰交换的节点相邻时记录next将要指向的地址为基准节点ajacent element exchange
                            tmp = current;
                        else
                        {   //要交换的几点不相邻时,记录next将要指向的地址为基准节点的下一个节点,一定要注意相邻节点的处理,否则会出现死循环
                            if (prevNext != null)
                                prevNext.Next = current;
                            tmp = current.Next;
                        }
                        current.Next = next.Next;
                        next.Next = tmp;
                        if (prevCurr != null)
                            prevCurr.Next = next;
                        current = next; //改变基准节点  为位置提到前面来的节点                    }

                    prevNext = next;
                    next = next.Next;
                }
                prevCurr = current;
                current = current.Next;

            }
            return head;
        }

你可能感兴趣的:(单链表)