一.写在前面的话:
找工作必须是全方位重点突击,准备工作可以从两方面着手,第一是公司的笔试环节,应该注重刷题。第二是公司的面试环节,对自己写在简历上的东西一定要熟悉,主要以项目中所涉及到的C++编程技术为主。
二.今日份编程练习
《C++实现单链表的反转》
实现思路:
1.如果单链表为空或者只有一个元素,那么就直接返回。
2.设置两个前后相邻的指针p,q,将p指针所指向的节点作为q所指向的节点的后继;
3.重复步骤2,直到q=NULL;
4.调整链表头和链表尾。
三.手写代码
#include
#include
using namespace std;
typedef struct listnode
{
int data;
listnode *next;
}listnode,*list;
void print(list head);
list reverse(list head);
list fill(list head);
int main()
{
listnode *head;
head=(listnode*)malloc(sizeof(listnode));
//对头节点中的两个参数进行初始化工作
head->data=-1;
head->next=NULL;
//建立一个单链表并对其进行初始化工作
list linklist=fill(head);
//输出单链表
print(linklist);
//反转单链表
reverse(linklist);
//输出翻转后的单链表
print(linklist);
getchar();
return 0;
}
//实现单链表反转函数
list reverse(list head)
{
//判断单链表head是否为空或者单链表中只有一个元素 ,如果是则直接返回 head
if(head->next==NULL||head->next->next==NULL)
{
return head;
}
list t=NULL;
list p=head->next;
list q=head->next->next;
//进行反转操作
while(q!=NULL)
{
t=q->next;
q->next=p;
p=q;
q=t;
}
//调整头节点
head->next->next=NULL;//设置链表尾
head->next=p;//设置链表头
return head;
}
//实现单链表的初始化:采用尾部追加节点的方法
list fill(list head)
{
listnode *p,*q;
p=head;
for(int i=0;i<10;i++)
{
q=(listnode*)malloc(sizeof(listnode));//分配空间
q->data=i+1;//赋值
q->next=NULL;//指定下一个节点为空
p->next=q;
p=q;
}
return head;
}
//打印出节点的元素
void print(list head)
{
list p=head;
p=p->next;
while(p!=NULL)
{
cout<
p=p->next;
}
cout<
}
四.输出结果: