给定一个单向链表,编写函数交换相邻 两个元素
输入: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7
输出: 2 -> 1 -> 4 -> 3 -> 6 -> 5 -> 7
输入: 1 -> 2 -> 3 -> 4 -> 5 -> 6
输出: 2 -> 1 -> 4 -> 3 -> 6 -> 5
通过观察发现:当输入的与元素个数是单数的时候,最后一位不参与交换。
方法1(迭代)
从头节点开始遍历列表,遍历过程中使用每个节点的下一个节点和当前节点的数据进行交换。
时间复杂度:O(n)
实现过程:
c语言
/*C Program to pairwise swap elements in a given linked list*/#include#include
/*A linked list node*/
structNode {intdata;struct Node*next;
};/*Function to swap two integers at addresses a and b*/
void swap(int *a, int *b);/*Function to pairwise swap elements of a linked list*/
void pairWiseSwap(struct Node*head)
{struct Node* temp =head;/*Traverse further only if there are at-least two nodes left*/
while( temp != NULL && temp->next !=NULL)
{/*Swap data of node with its next node's data*/swap(&temp->data, &temp->next->data);/*Move temp by 2 for the next pair*/temp= temp->next->next;
}
}/*Utility functions*/
/*function to swap two integers*/
void swap(int *a, int *b)
{inttemp;
temp= *a;*a = *b;*b =temp;
}/*Funtion to add a node at the beginning of Linked List*/
void push(struct Node** head_ref, intnew_data)<