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

Swap Nodes in Pairs

程序员文章站 2022-07-03 16:58:42
...

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

You may not modify the values in the list’s nodes, only nodes itself may be changed.

Example:

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

这道题是让我们翻转链表上相邻的两个节点而不是节点上的值。其实解法很简单,就是用两个指针分别指向当前节点和下一个节点,但是实现中需要考虑细节需要注意。
1.链表只有一个节点或者为空的时候,直接返回链表本身
2.链表为奇数个数时,需要注意访问到NULL节点,具体看代码

/**
 * 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) return NULL;
        // last 指向cur的下一个节点,pre指向cur上一个节点
        ListNode* cur=head, *new_head=head->next, *last=NULL, *pre=NULL;
        if (!head->next) return head;
        
        while(cur)
        {
            last=cur->next;
            if (last)
            {
                cur->next = last->next;
                last->next=cur;
                if (pre) pre->next=last;
                pre=cur;
                
            }
            cur=cur->next;
        }
        return new_head;
    }
};