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

Swap Nodes in Pairs

程序员文章站 2022-03-05 08:10:05
...

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 3 4 -> 2 1 4 3
 * 方法: 设立头结点避免特判 每次循环完成一组交换 并且维持一个next
 * */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        if(!head)   return NULL;
        // 问题 第一次进行交换时已经对head进行重新赋值了()
        ListNode *pre=new ListNode(0), *p=head, *tmp, *newhead=head;
        pre->next = head; // pre为当前要交换节点的前置节点
        if(head->next)  newhead = head->next;
        while(p && p->next){// 节点要有两个时才进行交换
            tmp = p->next->next;
            pre->next = p->next;
            pre->next->next = p;
            p->next = tmp;
            pre = p;
            p = tmp;
        }
        return newhead;

    }
};