LeetCode-024-兩兩交換連結串列中的節點
阿新 • • 發佈:2021-06-28
兩兩交換連結串列中的節點
題目描述:給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
示例說明請見LeetCode官網。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/swap-nodes-in-pairs/
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解法一:雙指標法
首先,如果head為空或者head沒有後繼節點,直接返回head;
然後用2個指標first和second分別指向第一個和第二個節點,new一個pre節點指向first,操作過程如下:
first的next指向second的next;
second的next指向first;
pre的next指向second;
前面幾步就是把first和second的位置交換;
然後pre指向first;
first指向first的next;
然後進行下一次遍歷,條件是first不為空且first的next不為空,直到這個條件不成立,則遍歷結束。
返回結果。
public class LeetCode_024 { public static ListNode swapPairs(ListNode head) { if (head == null || head.next == null) { return head; } ListNode newHead = head.next; ListNode pre = new ListNode(-1), first = head, second; pre.next = head; while (first != null && first.next != null) { second = first.next; first.next = second.next; second.next = first; pre.next = second; pre = first; first = first.next; } return newHead; } public static void main(String[] args) { ListNode head = new ListNode(1); head.next = new ListNode(2); head.next.next = new ListNode(3); head.next.next.next = new ListNode(4); head.next.next.next.next = new ListNode(5); ListNode result = swapPairs(head); while (result != null) { System.out.print(result.val + " "); result = result.next; } } }
【每日寄語】 宇宙山河浪漫,生活點滴溫暖,都值得你我前進。