lamp原始碼三層結構
阿新 • • 發佈:2020-10-13
兩兩交換連結串列中的節點
給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
示例
輸入:head = [1,2,3,4]
輸出:[2,1,4,3]
輸入:head = []
輸出:[]
輸入:head = [1]
輸出:[1]
題解
/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } */ /** * @param {ListNode} head * @return {ListNode} */ var swapPairs = function(head) { var headNode = new ListNode(null, head); var pre = headNode; var cur = head; while(cur && cur.next){ let curTmp = cur; let nextTmp = cur.next; curTmp.next = nextTmp.next; pre.next = nextTmp; nextTmp.next = curTmp; pre = curTmp; cur = curTmp.next; } return headNode.next; };
思路
通過迭代的方式實現兩兩交換連結串列中的節點,直接遍歷整個連結串列即可,首先定義一個空的頭結點,之後定義前置節點與當前正需要處理的節點,當正在處理的節點存在以及當前節點的下一個節點都存在時進行迴圈,將當前節點與當前節點的下一個節點進行快取,之後將curNode
節點的next
賦值為nextNode
節點的next
,即首先將該節點的下一個節點指向nextNode
的下一個節點,之後將preNode
的next
賦值為nextNode
,將nextNode
的next
賦值為curNode
,最後將preNode
賦值為curNode
,curNode
賦值為curNode
的next
,注意此時的curNode
其實已經被交換換成了,是兩個節點中的後一個節點,最後等待迴圈完成後返回頭結點的next
每日一題
https://github.com/WindrunnerMax/EveryDay
參考
https://leetcode-cn.com/problems/swap-nodes-in-pairs/