Swap Nodes in Pairs

来源:互联网 发布:崔雪莉在sm的地位 知乎 编辑:程序博客网 时间:2024/05/16 09:07

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
思路:题目不难,假设交换p与q(p在前)需要知道p前面的指针,因此需要三个指针,注意交换头部,以及链表长度为奇数的情况。代码如下:

/** * 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)//空或者长度为1            return head;        ListNode *p, *q, *pre;        pre = p = head;        q = p->next;        while(q){            if(p == head){//交换头                p->next = q->next;                q->next = p;                head = q;            }            else{                pre->next = q;                p->next = q->next;                q->next = p;            }            //移动            if(p->next){//没有到结尾                pre = p;                p = p->next;                q = p->next;            }            else                break;        }        return head;    }};
0 0
原创粉丝点击