推荐一款模拟面试、刷题神器 、从基础到大厂面试题:点击跳转刷题网站进行注册学习
目录
一、牛牛的单向链表
二、 牛牛的链表交换
三、牛牛的单链表求和
本题需要注意的是尾插函数的返回值,这个是由题目之中的输出要求得到的。
#include
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode;
int main(){
int n, temp;
scanf("%d",&n);
//头节点
Lnode *L = (Lnode *)malloc(sizeof(Lnode));
//r尾指针,用来连接尾节点和新建节点
Lnode *s,*r= L;
//建表
while(n--){
scanf("%d",&temp);
s = (Lnode *)malloc(sizeof(Lnode));
s->data = temp;
r->next = s;
r = s;
}
r->next = NULL;
//遍历输出节点值
while(L->next != NULL){
L = L->next;
printf("%d ",L->data);
}
return 0;
}
本题可以考虑先对数组前两个元素和后两个元素进行交换,再将数据拷贝整合至链表会方便很多。
#include
#include
struct Node{
int data;
struct Node* next;
};
void swap(struct Node* HeadNode,int n){
int i;
HeadNode=HeadNode->next;
int flag;
for(i=0;idata;
HeadNode->data=HeadNode->next->data;
HeadNode->next->data=flag;
i++;
}
if(i==n-1){
flag=HeadNode->data;
HeadNode->data=HeadNode->next->data;
HeadNode->next->data=flag;
}
HeadNode=HeadNode->next;
}
}
void Print(struct Node* HeadNode){
HeadNode=HeadNode->next;
while(HeadNode->next!=NULL){
printf("%d ",HeadNode->data);
HeadNode=HeadNode->next;
}
printf("%d",HeadNode->data);
}
int main(){
int n;
scanf("%d",&n);
int i;
int num;
struct Node* HeadNode=(struct Node*)malloc(sizeof(struct Node));
struct Node* PosNode=(struct Node*)malloc(sizeof(struct Node));
HeadNode->next=NULL;
PosNode=HeadNode;
for(i=0;idata=num;
newNode->next=NULL;
PosNode->next=newNode;
PosNode=newNode;
}
swap(HeadNode,n);
Print(HeadNode);
}
本题可以取巧,可以直接把数组中的值求和得到结果
推荐一款模拟面试、刷题神器 、从基础到大厂面试题:点击跳转刷题网站进行注册学习