单链表交换相邻元素
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; }
相关文章推荐
- 只调整指针来交换两个相邻的元素【双链表】
- 单双链表,通过指针变动交换相邻元素
- Leetcode016--链表相邻元素进行交换
- 交换单链表中相邻的两个元素 Swap Nodes in Pairs
- Swap Nodes in Pairs:交换链表数组相邻元素的值
- leetcode+交换链表相邻元素,head指向一个元素,只需要交换相邻元素,链表结构不变
- 链表相邻元素交换
- 单链表相邻两个节点之间交换顺序
- 用单循环链表存储一个环上的数据,并计算任意两个相邻元素之差是否超过2
- Java单链表基本操作(九)--交换相邻节点对的值
- LeetCode | Swap Nodes in Pairs(将链表中的元素两两交换)
- 链表相邻元素翻转
- 单链表交换任意两个元素(不包括表头)
- leetcode24,交换链表相邻的节点
- 【LeetCode91-100】编码种数,逆转单链表,IP地址转化,中序遍历二叉树,生成二叉搜索树,计算二叉树个数,交叉string【hard】,判断二叉搜索树是否合法,恢复二叉树(有两个元素被交换)
- 【LeetCode23-29+518】 K个有序子链,交换链表顺序(指针调换),Vector删除元素,移位运算符>>,DP算法
- 7-6 冒泡法排序(20 分) 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素
- 链表相邻元素翻转
- 算法 链表相邻元素翻转
- java 交换链表中所有相邻结点的顺序