数据结构逆置单链表算法思想
时间: 2023-11-20 18:50:38 浏览: 95
单链表逆置的算法思想是:从头节点开始,依次将每个节点的 next 指针指向它的前驱节点,直到遍历到链表的末尾节点。具体实现可以使用三个指针分别指向当前节点、当前节点的前驱节点和当前节点的后继节点,然后依次更新这三个指针即可。
下面是单链表逆置的代码实现:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverseList(head: ListNode) -> ListNode:
prev = None
curr = head
while curr:
next_node = curr.next
curr.next = prev
prev = curr
curr = next_node
return prev
```
其中,prev 表示当前节点的前驱节点,curr 表示当前节点,next_node 表示当前节点的后继节点。
相关问题
单链表就地逆置算法数据结构
单链表就地逆置算法是利用头插法的思想,通过保存下一个节点的地址来逆置链表。具体步骤如下:
1. 定义两个指针p和q,p指向当前节点,q用于保存下一个节点的地址。
2. 将链表的头节点的next指针置为空,表示逆置后的链表的尾节点。
3. 进入循环,当p不为空时,执行以下步骤:
- 将q指向p的下一个节点,保存下一个节点的地址。
- 将p的next指针指向逆置后的链表的头节点。
- 将逆置后的链表的头节点指向p,完成节点的插入。
- 将p指向q,继续下一轮循环。
4. 循环结束后,链表就地逆置完成。
有一个函数convert(int * H),其功能是:有一个头指针为H的单链表,它的各个结点的数据域的值分别是a1, a2, a3,……an, 需将所有的结点上的数据域的值逆置,即第一个结点的数据域变为an,即第二个结点的数据域变为an-1,…, 最后一个结点的数据域为a1。要求: 用文字阐述该函数的算法思想 ,后面附上能清晰表达算法思想的伪代码。(伪代码可以用编程语言的主要命令字符+中文或英文)
该函数的算法思想如下:
1. 定义三个指针pre、p、nex,分别指向当前结点的前一个结点、当前结点和当前结点的下一个结点。
2. 初始化pre为NULL,p为H。
3. 依次遍历链表,将p的next指针指向pre,然后将pre、p、nex分别向后移动一位,即pre=p,p=nex,nex=nex->next,直到p=NULL。
4. 将H指向pre,完成链表的逆置。
下面是伪代码:
```
convert(int *H) {
Node *pre = NULL, *p = H, *nex;
while (p != NULL) {
nex = p->next;
p->next = pre;
pre = p;
p = nex;
}
H = pre;
}
```
注:这里的Node是链表的结点类型,其next指针指向下一个结点的地址。因为题目中没有具体给出链表的结构定义,所以这里假设链表的结点类型为Node。
阅读全文