您的位置:首页 > 其它

单链表交换相邻元素

2012-09-28 09:57 169 查看
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
struct node* next;
int key;
} Node;
//交换相邻的元素,如果是交换两结点的值就很简单,但是交换结点的话就。。
//以下是交换结点。
//如 1 2 3 4 5 ==> 2 1 4 3 5
Node* swapAdjacent(Node *head1)
{
if(head1==NULL) return head1;
Node *q=head1,*pre=NULL;
while(q && q->next)
{
Node *p1=q,*p2=q->next;
q=p2->next;

p1->next=p2->next;
p2->next=p1;
if (pre == NULL) head1 = p2;
else		 pre->next = p2;
pre = p1;
}
return head1;
}
//创建列表
Node* createList(int *s,int len)
{
int i=0;
Node* head=NULL,*tail=NULL;
for(i=0;i<len;++i)
{
Node* newNode=(Node*)malloc(sizeof(Node));
newNode->key=s[i];
newNode->next=NULL;
if(tail==NULL)
{
head=tail=newNode;
}
else
{
tail->next=newNode;
tail=newNode;
}
}
return head;
}
//打印元素
void pr_list(Node* head)
{
while(head)
{
printf("%d ",head->key);
head=head->next;
}
}
//释放
void freeList(Node* head)
{
while(head)
{
Node* tmp=head;
head=head->next;
free(tmp);
}
printf("\n");
}
int main(void) {
int s[]={1,2,3,4,5,6,7,8,9,10,11};
int len=sizeof(s)/sizeof(*s);
Node *head=createList(s,len);
head=swapAdjacent(head);
pr_list(head);
freeList(head);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐