文章
45
粉丝
0
获赞
1
访问
2.2k
(1) 算法思路:
先遍历两个单链表,记录长度lens1,lens2,其差值为dif,将str指针移到dif位后开始比较,若有重复元素则将p指向它,并用flag记录。若flag保持至最后则表明P是所找后缀
(2)代码
typedef struct Node {
char data;
struct Node *next;
}PNode;
PNode solution(PNode *str1, PNode *str2) {
int lens1=0,lens2=0,flag=0,k=0,m=0;
PNode i = str1, j = str2, p = NULL;
while(i->next != NULL) { i = i->next; lens1++; } // 求str1长度
while(j->next != NULL) { j = j->next; lens2++; } // 求str2长度
if(lens1>lens2) {
for(m = 0; m < lens1-lens2; m++) { str1 = str1->next; }
} else { for(m = 0; m < lens2-lens1; m++) { str2 = str2->next; }}
while(str1->next != NULL) {
str1 = str1->next; str2 = str2->next; // 其中一节点为头结点,先右移再比
if(str1->data != str2->data) { flag = 0; }
if(str1->data == str2->data&&flag == 0){
p = str1; flag = 1; } // 找到第一个相同后缀
} // while
return p;
}
(3)
该算法的时间复杂度为O(m+n),其中m和n分别...
登录后发布评论
暂无评论,来抢沙发