这两个代码有什么区别呢


Node* find(LinkList L, ElementType x) {
    Node* m = L->next;
    while (m != NULL) {
        if (m->data == x) {
            return m;
        }
        m = m->next;
    }
}
Node* find(LinkList L, ElementType x){
    Node* p = L->next;;
    while (p != NULL && p->data != x){
        p = p->next;
    }
    return p;
}

下面那个结构更加紧凑,但两者意思是一样的。不论是m!=NULL还是p!=NULL,只有当m或p为链表的最后一个结点时,m或p才会等于NULL,所以在判断while循环是否继续执行下去的条件中加上这个,表明的是要遍历整条链表,除非遇到其它也能使while循环终结的条件。第一个是遍历这个链表,在这个过程中如果某个结点的数据域的值等于我们设定的值,那么返回这个结点,函数结束;第二个呢如果在遍历的过程中结点的数据域的值一直不等于我们设定的值,那么就一直往下走,而如果有这么一个结点的数据域确实储存着和我们设定的值相同的值,那么while循环就进行不下去了,而这个结点自然也是我们要的结点,返回这个结点后,函数结束。

区别挺大的,就说一句话,要是你的链表里面没有找到x,上面就没有return了,而下面的无论如何都会有return
所以上面的话你需要在最后面return m,代表没有找到x的情况下你的链表位置在哪里

img