【Leetcode】之Swap Nodes in Pairs

来源:互联网 发布:剑三 点绛唇捏脸数据 编辑:程序博客网 时间:2024/06/11 05:52

一.问题描述

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.

二.我的解题思路

这种链表的题一向不难解决,在纸上写写画画往往就知道该怎么求解。我是每两个节点进行一次操作,设立了四个指针。这四个指针分别指向,当前节点上一个节点(pri),当前节点(curr),下一个节点(next),下下个节点(tmp)。测试通过的程序如下:

/** * 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 * curr,* next,* tmp,*res,*pri;        if(head==NULL)            return NULL;        if(head->next==NULL)            return head;        curr=head;next=curr->next;            /*first done*/          tmp=next->next;          next->next=curr;          curr->next=tmp;          res=next;          pri=curr;          curr=curr->next;        while(curr!=NULL){            next=curr->next;            if(next==NULL)                break;            if(next->next!=NULL){                tmp=next->next;                next->next=curr;                curr->next=tmp;                curr=curr->next;                pri->next=next;                pri=next->next;            }            else{                pri->next=next;                next->next=curr;                curr->next=NULL;            }        }        return res;    }};
0 0
原创粉丝点击