}
}
return s;
}
8.如何判断一个单向链表是否有环。
int ISCircle(pListNode head)
{
pListNode p1=head;
p1=p1->m_pNext;
while(p1!=NULL)
{
if(p1==head) return 1;
else p1=p1->m_pNext;
}
return 0;
}
9.判断一个字符串是否对称。
aabbaa , efffe 返回 true
aabac 返回 false
int
{
SymmetricString( const char *ch)
int len=strlen(ch);
int i=0,j=len-1;
if(len%2!=0) return 0;
for(i=0,j=len-1;i<=len/2;i++,j--)
{
if(ch[i]!=ch[j]) return 0;
}
return 1;
}
10.判断一个字符串是否是另一个字符串的字串
int next[20];
void get_next(const char* T,int next[])
{
int i=0,j=-1;next[0]=-1;
int len=strlen(T);
while(i
else j=next[j];
}
}
int index_KMP(const char * S,const char * T)
{
i=0,j=0;
int
get_next(T,next);
int lens=strlen(S),lent=strlen(T);
while(i=lent) return i-lent;
else return -1;
}
}
链表的定义,栈的定义:
typedef struct stack
{
int top;
int space[MAXLEN+1];
}Stack;
int push(Stack *s,int num)
{
if(s->top>=sizeof(s->space)/sizeof(int)) return -1;//Error
s->space[s->top++]=num;
return num;
}
int pop(Stack *s)
{
if(s->top<0) return -1;
return s->space[--s->top];
}
int IsEmpty(Stack *s)
{
return s->top==0;
}
typedef struct ListNode
{
int m_nKey;
struct ListNode *m_pNext;
}ListNode,*pListNode;
pListNode CreateList()
{
srand((unsigned long)time(NULL));
pListNode head,p1,p2;
head=(pListNode)malloc(sizeof(ListNode));
p1=head;p2=p1;
int i=MAXLEN;
while(i--){
p2=(pListNode)malloc(sizeof(ListNode));
p2->m_nKey= rand()*rand()%(MAXLEN*rand());
p1->m_pNext=p2;
p1=p2;
}
p2->m_pNext=NULL;
return head;
}
void PrintList(pListNode head)
{
pListNode p=head;
do{
printf("%d/n",p->m_nKey);
p=p->m_pNext;
}while(p!=NULL);
}