链表操作
来源:互联网 发布:信用卡网络限额增加 编辑:程序博客网 时间:2024/06/07 03:32
#define N 20定义链表的结构:
typedef struct Node{int data;Node *next;}Node,*LinkList;
//反转链表
int reverLinkList(LinkList list){
LinkList newlist;
if(list==NULL||(newlist=(LinkList)malloc(sizeof(Node)))==NULL)
return 1;
Node *head=NULL;
head=list;
newlist->data=list->data;
newlist->next=NULL;
Node *temp=NULL;
//反转
while(list->next!=NULL){
temp=newlist;
newlist=list->next;
list->next=list->next->next;
newlist->next=temp;
}
printf("输出原链表\n");
list=head;
//输出原链表
while(list=NULL){
printf("%d\n",list->data);
list=list->next;
}
printf("输出新链表\n");
//输出新链表
while(newlist!=NULL){
printf("%d\n",newlist->data);
newlist=newlist->next;
}
return 0;
}
//合并两个有序链表
LinkList MergeTwoList(LinkList list1,LinkList list2){
LinkList newlist;
if((newlist=(LinkList)malloc(sizeof(Node)))==NULL)
return NULL;
if(list1==NULL)
return list2;
else if(list2==NULL)
return list1;
Node *head=NULL;
Node *temp=NULL;
while(list1!=NULL&&list2!=NULL){
temp=new Node;
if(list1->data<list2->data){
temp->data=list1->data;
temp->next=NULL;
list1=list1->next;
}else{
temp->data=list2->data;
temp->next=NULL;
list2=list2->next;
}
if(head==NULL){
head=temp;
newlist=temp;
}else{
newlist->next=temp;
newlist=newlist->next;
}
if(list1==NULL)
newlist->next=list2;
if(list2==NULL)
newlist->next=list1;
/*if(head==NULL){
if(list1->data<list2->data){
head=list1;
newlist=list1;
list1=list1->next;
}else{
head=list2;
newlist=list2;
list2=list2->next;
}
}else{
if(list1->data<list2->data){
newlist->next=list1;
newlist=newlist->next;
list1=list1->next;
}else{
newlist->next=list1;
newlist=newlist->next;
list2=list2->next;
}
}*/
}
newlist=head;
printf("合并后的链表\n");
while(newlist!=NULL){
printf("%d\n",newlist->data);
newlist=newlist->next;
}
return newlist;
}
//打印链表
void print(LinkList list){
while(list!=NULL){
printf("%d\n",list->data);
list=list->next;
}
}
//创建链表
LinkList createLinkList(){
LinkList list;
if((list=(LinkList)malloc(sizeof(Node)))==NULL){
printf("error");
return NULL;
}
Node *head=NULL;
Node *p=NULL;
for(int i=0;i<20;i+=2){
p=new Node;
p->data=i;
p->next=NULL;
if(head==NULL){
head=p;
list=p;
}
else{
list->next=p;
list=list->next;
}
}
/*list=head;
printf("-----打印链表-----\n");
print(list);*/
list=head;
return list;
}
//在链表的尾部加入元素
LinkList addNode(LinkList list ,int value){
Node *head=NULL;
Node *p=NULL;
head=list;
p=new Node();
p->data=value;
p->next=NULL;
if(list==NULL){
head=p;
}
else{
while(list->next!=NULL){
list=list->next;
}
list->next=p;
}
return head;
}
//移除链表中的元素
LinkList removeNode(LinkList list,int value)
{
Node *head=NULL;
head=list;
if(list==NULL){
return list;
}
if(list->data==value){
list=list->next;
return list;
}
while(list->next!=NULL){
if(list->next->data!=value){
list=list->next;
}
else{
list->next=list->next->next;
break;
}
}
return head;
}
//从尾到头打印链表,非递归,借助栈来实现
void printlistrever(LinkList list){
Node *node;
std::stack<Node *> nodes;
while(list!=NULL){
nodes.push(list);
list=list->next;
}
while(!nodes.empty()){
node=nodes.top();
printf("%d\n",node->data);
nodes.pop();
}
}
//从尾到头打印链表,递归
void printlistrever_recursion(LinkList list)
{
if(list!=NULL)
{
if(list->next!=NULL)
{
printlistrever_recursion(list->next);
}
printf("%d\n",list->data);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
LinkList list;
LinkList list2;
//产生链表
list=createLinkList();
printf("输出链表一\n");
print(list);
//在尾部添加元素
printf("-----尾部添加元素后输出链表一---\n");
list2=addNode(list,7);
print(list2);
//删除结点
//printf("-----删除结点---\n");
//print(removeNode(list2,0));
//从尾部打印结点
printf("-----从尾部打印结点---\n");
//printlistrever(list2);//非递归
printlistrever_recursion(list2);//递归
//反转
//reverLinkList(list);
//合并两个链表
//MergeTwoList(list,list2);
return 0;
}
- 实现链表基本操作(简单操作)
- 链表操作源程序
- 链表操作
- C++ 链表操作
- 链表的操作
- 链表操作源程序
- 链表的操作
- 链表的操作
- C++链表操作
- 链表操作
- 链表操作
- 链表基本操作
- LinkList链表操作
- 合并链表操作
- 链表简单操作
- 链表的操作
- 链表操作
- 操作链表
- error C2039: “addTextureMesh”: 不是“pcl::visualization::PCLVisualizer”的成员
- HTml的表格创建
- spark实现UV统计
- 前景检测算法(八)--SACON算法
- java 图片处理灰度化
- 链表操作
- 莫队算法
- 16.7.9总结
- mysql 主从复制配置
- [Array]Merge Sorted Array
- PHP filter_var() 函数使用
- iOS开发英汉术语对照(三)
- CentOS 6.5/6.6 yum安装mysql 5.7 最完整版教程
- UML系列图--用例图