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;
    	}
    }
    
  • 相关阅读:
    bzoj 1800 & 洛谷 P2165 [AHOI2009]飞行棋 —— 模拟
    bzoj 1050 [ HAOI 2006 ] 旅行comf —— 并查集
    洛谷P2593 [ ZJOI 2006 ] 超级麻将 —— DP
    bzoj 3029 守卫者的挑战 —— 概率DP
    poj 2288 Islands and Bridges ——状压DP
    bzoj 1029 [ JSOI 2007 ] 建筑抢修 —— 贪心
    bzoj 3743 [ Coci 2015 ] Kamp —— 树形DP
    bzoj 1053 [ HAOI 2007 ] 反素数ant ——暴搜
    【构造共轭函数+矩阵快速幂】HDU 4565 So Easy! (2013 长沙赛区邀请赛)
    构造类斐波那契数列矩阵(矩阵
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/2619072.html
Copyright © 2011-2022 走看看