用python写出,在单链表的结点中包含两个域:entry和next,写一算法,在带头结点的单链表中查找元素item,返回该元素所在的位序。
时间: 2023-06-01 14:01:28 浏览: 78
以下是Python代码:
```python
class Node:
def __init__(self, entry=None, next=None):
self.entry = entry
self.next = next
def find_index(head, item):
current = head.next
index = 1
while current is not None:
if current.entry == item:
return index
current = current.next
index += 1
return -1
```
解析:
首先定义了一个Node类,其中包含entry和next两个域。entry表示该结点存储的元素,next表示指向下一个结点的指针。然后定义了一个find_index函数,该函数接受一个带头结点的单链表的头结点head和要查找的元素item,返回该元素在链表中的位序。在函数中,首先定义了一个current指针,指向链表的第一个结点,同时定义一个index变量,表示当前指针所指向的结点的位序。然后进入循环,判断当前结点的entry是否等于item,如果是,则返回index;否则将指针指向下一个结点,并将index加1。如果循环结束后还没有找到该元素,则返回-1。
相关问题
有两个带附加头结点的单链表,结点包含两个域:entry和next,若单链表中的元素值递增有序排列,请写算法,将两个单链表按顺序合并成一个链表
1. 定义一个新的带附加头结点的单链表result,以及三个指针p1、p2、p,分别指向两个单链表的头结点和result的尾结点。
2. 比较p1和p2所指向结点的元素值大小,将较小的结点插入到result的尾结点后面,并将指针p指向新插入的结点。
3. 将p1或p2指向下一个结点,继续执行步骤2,直到p1或p2中的一个为空。
4. 将p指向另一个非空的单链表的剩余部分,将其插入到result的尾结点后面。
5. 返回result的头结点。
算法实现如下:
```python
def merge_sorted_lists(head1, head2):
# 定义一个新的单链表result
result = ListNode(None)
p1, p2, p = head1.next, head2.next, result
# 比较p1和p2所指向结点的元素值大小,将较小的结点插入到result的尾结点后面
while p1 and p2:
if p1.entry < p2.entry:
p.next = p1
p1 = p1.next
else:
p.next = p2
p2 = p2.next
p = p.next
# 将p指向另一个非空的单链表的剩余部分,将其插入到result的尾结点后面
p.next = p1 if p1 else p2
# 返回result的头结点
return result
```
用Python实现 在单链表的结点中包含两个域:entry和next,写一算法,在带头结点的单链表中查找元素item,返回该元素所在的位序。
以下是Python实现:
```python
def find_position(head, item):
"""
在带头结点的单链表中查找元素item,返回该元素所在的位序。
"""
pos = 0
p = head.next
while p is not None:
pos += 1
if p.entry == item:
return pos
p = p.next
return -1 # 如果没有找到,返回-1
```
其中,head为带头结点的单链表的头结点,item为待查找的元素。该算法使用了一个变量pos记录当前结点的位序,初始值为0。然后从头结点的下一个结点开始遍历单链表,每遍历一个结点,就将pos加1。如果找到了目标元素,就返回它的位序;如果遍历完整个单链表还没有找到目标元素,就返回-1表示没有找到。
阅读全文