设有一个线性表E={e1,..en}、设计一算法将其逆置,使元素次 序颠倒,要求逆线性表占用原线性表空间,并用单链表存储表示。
时间: 2024-05-10 20:21:31 浏览: 88
线性表的原地逆置(包括顺序存储方式和链式存储方式)
3星 · 编辑精心推荐
算法步骤如下:
1. 定义三个指针:p1指向当前节点,p2指向当前节点的前一个节点,p3指向当前节点的后一个节点。
2. 初始化p1为头节点,p2为空,p3为p1的下一个节点。
3. 依次遍历链表,将p1的next指向p2,然后移动p2、p1、p3指针,使它们分别指向当前节点、下一个节点和下下个节点。
4. 直到p1指向尾节点,此时p2指向倒数第二个节点,将p1的next指向p2,链表逆置完成。
5. 返回头节点即可。
具体实现如下:
```python
def reverse_linked_list(head):
if head is None or head.next is None:
return head
p1 = head
p2 = None
p3 = p1.next
while p3 is not None:
p1.next = p2
p2 = p1
p1 = p3
p3 = p3.next
p1.next = p2
head.next = None
head = p1
return head
```
时间复杂度为O(n),空间复杂度为O(1)。
阅读全文