用Python实现 在单链表的结点中包含两个域:entry和next,写一算法,在带头结点的单链表中查找元素item,返回该元素所在的位序。
时间: 2023-05-30 13:05:01 浏览: 144
以下是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表示没有找到。
相关问题
使用python有两个带附加头结点的单链表,结点包含两个域:entry和next,若单链表中的元素值递增有序排列,请写算法,将两个单链表按顺序合并成一个链表。
可以使用双指针合并两个有序单链表,具体步骤如下:
1. 创建一个新的头结点new_head,并将其next指向None。
2. 定义两个指针p和q,分别指向两个单链表的第一个节点。
3. 比较p和q节点的entry值大小,将entry值小的节点插入到new_head链表的末尾,并将指针p或q向后移动一个节点。
4. 重复步骤3,直到p或q指向None。
5. 如果p或q还有剩余节点,则将剩余节点插入到new_head链表的末尾。
6. 返回new_head链表的头结点。
下面是Python代码实现:
```python
class Node:
def __init__(self, entry=None, next=None):
self.entry = entry
self.next = next
def merge_sorted_lists(head1, head2):
new_head = Node()
p = head1.next
q = head2.next
tail = new_head
while p and q:
if p.entry <= q.entry:
tail.next = p
p = p.next
else:
tail.next = q
q = q.next
tail = tail.next
if p:
tail.next = p
if q:
tail.next = q
return new_head
```
其中,head1和head2分别为两个带附加头结点的有序单链表的头结点。调用merge_sorted_lists函数即可得到合并后的有序单链表的头结点。
Python 有两个带附加头结点的单链表,结点包含两个域:entry和next,若单链表中的元素值递增有序排列,请写算法,将两个单链表按顺序合并成一个链表。
算法步骤如下:
1. 创建一个新的头结点head,以及一个游标指针p指向head。
2. 比较两个链表当前节点的值,将值较小的节点加入到新链表中,并将游标指针p指向新加入的节点。
3. 继续比较两个链表的下一个节点,重复步骤2,直到其中一个链表全部加入到新链表中。
4. 将另一个链表中剩余的节点加入到新链表中。
5. 返回新链表的头结点head。
代码如下:
```python
def merge_lists(head1, head2):
# 创建一个新的头结点head,以及一个游标指针p指向head
head = ListNode(None)
p = head
# 比较两个链表当前节点的值,将值较小的节点加入到新链表中,并将游标指针p指向新加入的节点
while head1 and head2:
if head1.entry < head2.entry:
p.next = head1
head1 = head1.next
else:
p.next = head2
head2 = head2.next
p = p.next
# 将另一个链表中剩余的节点加入到新链表中
if head1:
p.next = head1
if head2:
p.next = head2
# 返回新链表的头结点head
return head.next
```
阅读全文