PLNode Locate_LinkList(LinkList L, int x) { assert(NULL != L); /*在单链表L中查找值为x的结点,找到后返回其指针,否则返回空*/ PLNode p = L->next; //L为带头结点的单链表 // 在链表中查找第一个不小于x的结点 while (p&&p->data != x) p = p->next; if (p && p->data != x) return NULL; return p; }
时间: 2023-05-12 17:02:41 浏览: 204
!= NULL && p->data < x) { p = p->next; } // 如果找到了值为x的结点,返回其指针 if (p != NULL && p->data == x) { return p; } // 否则返回空指针 return NULL; }
这是一个在单链表中查找值为x的结点的函数,如果找到了就返回其指针,否则返回空指针。
相关问题
LinkList locate_LinkList(LinkList H, char key[]); //H为单链表的头指针,key为要查询的姓名
你好!谢谢你的问题。根据你给出的函数原型,这个函数是用来查询某个姓名在单链表中的位置的。具体实现方法可能类似于遍历链表,逐一比对姓名,直到找到目标姓名为止。如果找到了,则返回该节点位置的指针;如果没有找到,则返回一个空指针。
请注意,我的回答只是基于你的问题中提供的信息给出的一个简要概述。如果你需要更多的细节或者有其他问题,请继续提问,我会尽力为你解答。同时,我也会遵守你的要求,不会透露你提出的任何问题或要求。
已知链表类的定义如下,实现各个成员函数。主函数中输入数据(以0结束)利用Insert函数依次将数据插入到表的1号位置,利用DispList按照逻辑次序输出表中元素,再输入一个要查找的元素,利用查找函数Locate查找其在表中的位置,最后利用Reverse函数将数据逆序,再利用DispList输出。 template <class T> class LinkList { public: LinkList( ); //建立只有头结点的空链表 ~LinkList(); //析构函数 int Length(); //求单链表的长度 int Locate(T x); //求单链表中值为x的元素序号 void Insert(int i, T x); //在单链表中第i个位置插入元素值为x的结点 void Reverse( ); //reverse list void DispList( ); //遍历单链表,按序号依次输出各元素 private: Node<T> *first; //单链表的头指针 }; 输入样例说明: 例如输入数据为:1 2 3 4 5 6 0 3,即将1,2,3,4,5,6插入表中的1号位置,得到逻辑次序为6,5,4,3,2,1的顺序表,3为在表中待查找的数据,3的位置为4。 若输入:1 2 3 4 5 6 0 13 13在表中无,则输出:No found
以下是LinkList类的实现:
template <class T>
class LinkList {
public:
LinkList() {
first = new Node<T>;
first->next = NULL;
}
~LinkList() {
Node<T> *p = first, *q;
while (p != NULL) {
q = p->next;
delete p;
p = q;
}
}
int Length() {
int len = 0;
Node<T> *p = first->next;
while (p != NULL) {
len++;
p = p->next;
}
return len;
}
int Locate(T x) {
int i = 1;
Node<T> *p = first->next;
while (p != NULL && p->data != x) {
i++;
p = p->next;
}
if (p == NULL) {
return -1;
} else {
return i;
}
}
void Insert(int i, T x) {
Node<T> *p = first, *q;
int j = 0;
while (p != NULL && j < i - 1) {
j++;
p = p->next;
}
if (p == NULL || j > i - 1) {
cout << "Insertion position is invalid." << endl;
return;
}
q = new Node<T>;
q->data = x;
q->next = p->next;
p->next = q;
}
void Reverse() {
Node<T> *p = first->next, *q, *r;
first->next = NULL;
while (p != NULL) {
q = p->next;
p->next = first->next;
first->next = p;
p = q;
}
}
void DispList() {
Node<T> *p = first->next;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
private:
Node<T> *first;
};
其中,Node类的定义如下:
template <class T>
class Node {
public:
T data;
Node<T> *next;
};
主函数的实现如下:
int main() {
LinkList<int> list;
int x;
cin >> x;
while (x != 0) {
list.Insert(1, x);
cin >> x;
}
list.DispList();
cin >> x;
int pos = list.Locate(x);
if (pos == -1) {
cout << "No found" << endl;
} else {
cout << pos << endl;
}
list.Reverse();
list.DispList();
return 0;
}
输入样例1:
1 2 3 4 5 6 0 3
输出样例1:
6 5 4 3 2 1
4
1 2 3 4 5 6
输入样例2:
1 2 3 4 5 6 0 13
输出样例2:
6 5 4 3 2 1
No found
1 2 3 4 5 6
阅读全文