当前位置: 代码迷 >> 综合 >> leetcode_24:Swap Nodes in Pairs
  详细解决方案

leetcode_24:Swap Nodes in Pairs

热度:7   发布时间:2023-12-10 22:43:16.0

这个题目的话,过程本身不算难。主要问题就是要先对开头的两个节点进行处理。因为开头的两个节点是没有前驱节点的,所以就要单独处理,并记住新的链表头。所以能看到针对开头两个和后面的节点处理过程大致是类似的。代码如下:

    public ListNode swapPairs(ListNode head) {
    if (head == null || head.next == null)	//如果没有节点或者只有一个则直接返回return head;ListNode p1 = head, p2 = head.next;		//p1和p2指向了要交换的两个节点//先针对头两个节点进行交换,完成后p1为靠后的节点,p2则为靠前的节点p1.next = p2.next;p2.next = p1;//交换完成后,记住新的链表头head = p2;ListNode pre = p1;	//每次都要记住交换的两个节点的前一个节点if (p1.next != null) {
    p1 = p1.next;p2 = p1.next;} else {
    return head;}while (p1 != null && p2 != null) {
    		//p2!=null保证了剩余要交换的节点数目一定是大于等于2的p1.next = p2.next;p2.next = p1;pre.next = p2;		//把交换的两个节点和前面的连接在一起if (p1.next != null) {
    pre = p1;p1 = p1.next;p2 = p1.next;} else {
    break;}}return head;}
  相关解决方案