雙向鏈表交換節點


        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