欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Swap Nodes in Pairs

程序员文章站 2022-07-03 16:23:54
...

Given a linked list, swap every two adjacent nodes and return its head.

For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.

Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

 

代码不是最简的,处理head的部分明显可以和后面合并。关键记住无论思路多清晰都需要模拟一下。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *swapPairs(ListNode *head) {
        ListNode *first  = head;
        
        if(head == NULL) return NULL;
        ListNode *second = head -> next;
        ListNode *temp;
        
        if(second != NULL)
        {
             head = second;
             temp = first;
             first -> next = second -> next;
             second -> next = first;
             first = first->next;
             if(first == NULL ||first -> next == NULL )return head;
             second = first ->next;
             temp ->next = second;
             
        }
        
        while(first != NULL && second != NULL)
        {
             temp = first;
             first -> next = second -> next;
             second -> next = first;
             first = first->next;
             if(first == NULL ||first -> next == NULL )return head;
             second = first ->next;
             temp ->next = second;
        }
        
        return head;
        
    }
};