链表拆成两个链表(奇数链和偶数链)

这篇博客介绍了如何将链表拆分成两个链表,一个包含奇数位置的元素,另一个包含偶数位置的元素。提供了两种不同的实现方法,一种通过交换指针的方式,另一种通过直接移动指针完成。示例代码使用C++编写,分别展示了两种方法的实现细节,并进行了测试打印输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

struct Node{
	int data;
	Node* next;
};
void exchange(Node* &p1,Node* &p2){
	Node* tmp=p1;
	p1=p2;
	p2=tmp;
}
void transform(Node* head,Node* &head1,Node* &head2){
	if(head==NULL){
		head1=head2=NULL;
	    return;
	}
	Node* n1=head,*n2=n1->next;
	head1=n1,head2=n2;
	//这儿设计的比较好,只需要两个指针不断的轮换,微软面试时自己写了四个指针的,感觉有些复杂 
	while(n2){
		n1->next=n2->next;
		n1=n1->next;
		exchange(n1,n2);
	}
}
Node* nd[10];
int main(){
	for(int i=0;i<10;i++){
		nd[i]=new Node();
		nd[i]->data=i;
	}
	for(int i=0;i<9;i++)
		nd[i]->next=nd[i+1];
	nd[9]->next=NULL;
	Node* p1,*p2;
	p1=p2=NULL;
	transform(nd[0],p1,p2);
	while(p1){
	    cout<<p1->data<<" ";
	    p1=p1->next;
	}
	cout<<endl;
	wh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值