zoukankan      html  css  js  c++  java
  • 判断是否子链表,链表置逆

    9)【判断b链表是否a链表的子序列】假设带头结点

    错误代码:没有考虑重复结点的情况。

    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    typedef struct node
    {
    	int data;
    	struct node *next;
    }Listnode,*LinkList;
    int _tmain(int argc, _TCHAR* argv[])
    {
    	return 0;
    }
    bool isofseries(LinkList a,LinkList b)
    {
    	LinkList pa=a->next,pb=b->next;//pa,pb为工作指针
    	while(pa&&pa->data!=pb->data)
    	{
    		pa=pa->next;
    	}
    	if(pa==NULL) return false;
    	while(pa&&pb)
    	{
    		if(pa->data==pb->data)
    		{
    			pa=pa->next;
    			pb=pb->next;
    		}
    		else break;
    	}
    	if(pb==NULL)return true;
    	else return false;
    }
    

     正确代码:

    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    typedef struct node
    {
    	int data;
    	struct node *next;
    }Listnode,*LinkList;
    int _tmain(int argc, _TCHAR* argv[])
    {
    	return 0;
    }
    bool isofseries(LinkList a,LinkList b)
    {
    	LinkList pa=a->next,pb=b->next;//pa,pb为工作指针
    	LinkList pre=pa;
    	while(pa&&pb)
    	{
    		if(pa->data==pb->data)
    		{
    			pa=pa->next;
    			pb=pb->next;
    		}
    		else
    		{
    			pa=pre->next;//从上次开始匹配的元素重新开始比较
    			pre=pa;
    			pb=b->next;//pb从头开始
    		}
    	}
    	if(pb==NULL)return true;
    	else return false;
    }
    

     10)带头结点的链表置逆

    自己写的代码,不够简洁

    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    typedef struct node
    {
    	int data;
    	struct node *next;
    }Listnode,*LinkList;
    int _tmain(int argc, _TCHAR* argv[])
    {
    	return 0;
    }
    void reverse(LinkList &La)
    {
    	LinkList pa=La->next,pb=pa->next;//pa为指向首结点,pb为工作指针
    	LinkList r;
    	while(pb)
    	{
    		r=pb->next;
    		La->next=pb;
    		pb->next=pa;
    		pa=pb;//将pb插入La和pa之间
    		pb=r;
    	}
    }
    

     简洁的代码

    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    typedef struct node
    {
    	int data;
    	struct node *next;
    }Listnode,*LinkList;
    int _tmain(int argc, _TCHAR* argv[])
    {
    	return 0;
    }
    void reverse(LinkList &La)
    {
    	LinkList pa=La->next;//pa为工作指针
    	La->next=NULL;
    	while(pa)
    	{
    		LinkList r=pa->next;
    		pa->next=La->next;
    		La->next=pa;	
    		pa=r;
    	}
    }
    

     11)带头结点的链表

    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    typedef struct node
    {
    	int data;
    	struct node *next;
    }Listnode,*LinkList;
    int _tmain(int argc, _TCHAR* argv[])
    {
    	return 0;
    }
    void reverse(LinkList &La)
    {
    	LinkList pa=La->next;//pa为工作指针
    	La->next=NULL;
    	while(pa)
    	{
    		LinkList r=pa->next;
    		pa->next=La;//插入到第一个结点前
    		La=pa;	
    		pa=r;
    	}
    }
    
  • 相关阅读:
    谈谈对《镇魔曲》经济的一些看法
    谈谈对《神武2》经济的一些看法
    关于数值策划在使用Excel表时的一点想法
    游戏系统数值建模过程设计
    制作Excel工作薄目录
    制作当前表所在文件夹中所有文件的动态链接
    Excel各种tips汇总
    关于randbetween连乘的问题
    VBA实现两种方法生成任意概率分布的随机数
    Excel数值、文本相互转换
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/2619072.html
Copyright © 2011-2022 走看看