【leetcode】Swap Nodes in Pairs

来源:互联网 发布:淘宝店家推荐 编辑:程序博客网 时间:2024/06/16 03:08

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.

完整可运行程序(包括输出):

#include <cstdio>using namespace std;struct ListNode{    int val;    ListNode *next;    ListNode(int x) : val(x), next(NULL) {}};ListNode *swapPairs(ListNode *head){    if(head == NULL || head->next == NULL)        return head;    // At least two nodes    ListNode *p1 = head, *p2 = head->next, *p3 = NULL;    head = head->next;    while(p1 != NULL)    {        p2 = p1->next;        p3 = p2->next;        p2->next = p1;        if(p3 == NULL || p3->next == NULL)        {            p1->next = p3;            break;        }        else            p1->next = p3->next;        p1 = p3;    }    return head;}void print_list(ListNode *head){    if(head == NULL)        printf("\n");    else        printf("%d", head->val);    ListNode *p = head->next;    while(p != NULL)    {        printf("->%d", p->val);        p = p->next;    }    printf("\n");}int main(){    int n;    scanf("%d", &n);    int i, tmp;    ListNode *head = NULL, *p = NULL, *q = NULL;    for(i = 0; i < n; i++)    {        scanf("%d", &tmp);        q = new ListNode(tmp);        if(head == NULL)        {             head = q;             p = head;        }        else        {            p->next = q;            p = p->next;        }    }    printf("Before swap the list:\n");    print_list(head);    printf("After swap the list:\n");    head = swapPairs(head);    print_list(head);    return 0;}


0 0
原创粉丝点击