双向链表交换节点


        switchChainNode(fromNode, targetNode) {
            let attrFromNode = {
                index: fromNode.index,
                prev: fromNode.prev,
                next: fromNode.next
            };
            let attrTargetNode = {
                index: targetNode.index,
                prev: targetNode.prev,
                next: targetNode.next
            };

            let isSibling = attrTargetNode.prev === fromNode;
            // 交换index 
            // 更改prev next

            if (attrFromNode.prev) {
                attrFromNode.prev.next = targetNode;
            }

            if (attrTargetNode.next) {
                attrTargetNode.next.prev = fromNode;
            }

            targetNode.prev = attrFromNode.prev;
            fromNode.next = attrTargetNode.next;

            if (isSibling) {
                targetNode.next = fromNode;
                fromNode.prev = targetNode;
            } else {
                targetNode.next = attrFromNode.next;
                fromNode.prev = attrTargetNode.prev;

                if (attrTargetNode.prev) {
                    attrTargetNode.prev.next = fromNode;
                }
                if (attrFromNode.next) {
                    attrFromNode.next.prev = targetNode;
                }
            }

            fromNode.index = attrTargetNode.index;
            targetNode.index = attrFromNode.index;
        }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM