判断是否子链表,链表置逆
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; } }