标签:
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.
Linked List
这道题没啥好说的,主要是线性表的链式存储结构,需要注意的是,在题目的线性表中,head头结点是第一个结点。
#include<iostream> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ListNode* swapPairs(ListNode* head) { ListNode* ptr=head; ListNode* ptr0; ListNode* ptr1; ListNode* ptr2; ListNode* temp; if(head==NULL) return ptr; if(ptr->next==NULL) return ptr; ptr0=ptr; ptr1=ptr0->next; ptr0->next=ptr1->next; ptr1->next=ptr0; temp=ptr0; ptr0=ptr1; ptr1=temp; ptr=ptr0; ptr2=ptr1->next; if(ptr2==NULL) return ptr; ptr2=ptr2->next; if(ptr2==NULL) return ptr; ptr1=ptr1->next; ptr0=ptr0->next; while(1) { ptr1->next=ptr2->next; ptr2->next=ptr1; ptr0->next=ptr2; temp=ptr1; ptr1=ptr2; ptr2=temp; if(ptr2->next==NULL) return ptr; ptr2=ptr2->next; ptr1=ptr1->next; ptr0=ptr0->next; if(ptr2->next==NULL) return ptr; ptr2=ptr2->next; ptr1=ptr1->next; ptr0=ptr0->next; } return ptr; }
若是题目中的线性表的存储的头结点没有存储数据的话,又是另外一种做法了
ListNode* swapPairs(ListNode* head) { ListNode* ptr; ListNode* ptr0; ListNode* ptr1; ListNode* ptr2; ListNode* temp; ptr=ptr0=head; if(ptr==NULL) return ptr; if(ptr->next==NULL) return ptr; ptr1=ptr0->next; if(ptr1->next==NULL) return ptr; ptr2=ptr1->next; while(1) { ptr1->next=ptr2->next; ptr2->next=ptr1; ptr0->next=ptr2; temp=ptr1; ptr1=ptr2; ptr2=temp; if(ptr2->next==NULL) return ptr; ptr2=ptr2->next; ptr1=ptr1->next; ptr0=ptr0->next; if(ptr2->next==NULL) return ptr; ptr2=ptr2->next; ptr1=ptr1->next; ptr0=ptr0->next; } return ptr; }
int main() { ListNode* head; head=(ListNode*)malloc(sizeof(ListNode)); head->val=1; ListNode* ptr2; ptr2=(ListNode*)malloc(sizeof(ListNode)); head->next=ptr2; ptr2->next=NULL; ptr2->val=2; cout<<head->val<<‘ ‘<<head->next->val<<endl; ListNode* head1; head1=swapPairs(head); cout<<head1->val<<‘ ‘<<head1->next->val<<endl; }
leetcode_1题——Swap Nodes in Pairs(线性表的链式存储)
标签:
原文地址:http://www.cnblogs.com/yanliang12138/p/4456088.html