eetcode_c++:链表:Swap Nodes in Pairs(024)

来源:互联网 发布:手机可以禁止安装软件 编辑:程序博客网 时间:2024/06/10 09:12

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.

//每一对节点交换


算法

O(N)


#include <iostream>#include <vector>#include<cmath>#include <algorithm>using namespace std;struct ListNode{    int val;    ListNode* next;    ListNode(int x):val(x),next(NULL){}};//leetcode-------------------class Solution {public:    ListNode* swapPairs(ListNode* head) {        ListNode* dummy=new ListNode(-1);        dummy->next=head;        ListNode *preNode=dummy,*curNode=head;        int cnt=1;        while(curNode && curNode->next){            preNode->next=curNode->next;            curNode->next=preNode->next->next;            preNode->next->next=curNode;            // go over two nodes            preNode=curNode;            curNode=curNode->next;        }        head=dummy->next;        delete dummy;   // 删除头结点        return head;    }};//-------------//---数组数据插入链表----------------ListNode* createList(int a[],int n){    ListNode* head=NULL,*p=NULL;    for(int i=0;i<n;i++){        if(head==NULL){            head=p=new ListNode(a[i]);        }else{            p->next=new ListNode(a[i]);            p=p->next;        }    }    return  head;}void printList(ListNode* h){    while(h!=NULL){        printf("%d ",h->val);        h=h->next;    }    printf("\n");}//-------------int main(){    Solution s;    int a[]={1,3,5,6,7,10};    ListNode* p1=createList(a,sizeof(a)/sizeof(int));    printList(s.swapPairs(p1));    return 0;}
0 0