给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
题解
a, b 为要翻转的节点,首先需要让 p.next 指向 b,完成与前序链表的链接,然后让 a.next 指向 c,即下一次翻转的前一个节点,完成与后续链表的链接,在让 b 指向 a,完成本次翻转。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode swapPairs(ListNode head) { ListNode dummy = new ListNode(-1); dummy.next = head; for (ListNode p = dummy; p.next != null && p.next.next != null;){ ListNode a = p.next; ListNode b = a.next; p.next = b; a.next = b.next; b.next = a; p = a; } return dummy.next; } }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于