[LeetCode OJ]Swap Nodes in Pairs

来源:互联网 发布:mysql 修改列默认值 编辑:程序博客网 时间:2024/04/27 18:05

【问题描述】

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.

问题来源:swap-nodes-in-pairs

【解题分析】

题意:给定一个链表,调换每两个相邻节点,并返回其头部。算法必须使用唯一不变的空间,不能修改列表中的值,只有节点本身是可以改变的。
我们也以1->2->3->4这个作为例子,交换前两个。
ListNode* result = head->next;// become: 2->3->4head->next = result->next;// become:1->3->4result->next = head;// become:2->1->3->4
对后面的元素也进行swap,只需要用递归替换掉result->next。
ListNode* result = head->next;head->next = swapPairs(result->next);result->next = head;
递归终止的条件:
1. 没有节点,返回NULL作为结束。
2. 只有一个节点,不用进行交换,直接返回该节点即可。

【源代码】

/** * 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) {        if (head == NULL || head->next == NULL) {            return head;        }        ListNode* res = head->next;        head->next = swapPairs(res->next);        res->next = head;        return res;    }};