数据结构单链表的逆置
时间: 2023-11-26 19:44:19 浏览: 112
单链表的逆置有两种方法:头插法和递归法。头插法是将原链表的每个节点插入到新链表的头部,从而实现逆置;递归法则是将原链表分为当前表头结点和其余部分,递归的过程就是,先将表头结点从链表中拆出来,然后对其余部分进行逆序,最后将当前的表头结点链接到逆序链表的尾部。递归的终止条件就是链表只剩一个节点时,直接返回这个节点。
以下是两种方法的代码实现:
头插法:
```c
//单链表反转(头插法)
LIST* reverse(LIST* head) {
LIST *temp=NULL,*Phead=NULL;
while(head!=NULL) {
temp=head;
head=head->next;
temp->next=Phead;
Phead=temp;
}
return Phead;
}
```
递归法:
```c
//单链表反转(递归法)
LIST* reverse(LIST* head) {
if(head==NULL||head->next==NULL)
return head;
LIST *new_head=reverse(head->next);
head->next->next=head;
head->next=NULL;
return new_head;
}
```
相关问题
数据结构:编写函数实现单链表逆置
数据结构是计算机中用来组织和存储数据的方式。单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。
要实现单链表的逆置,可以编写一个函数来完成。以下是一个示例代码:
```python
class Node:
def __init__(self, data):
self.data = data
self.next = None
def reverse_linked_list(head):
if head is None or head.next is None:
return head
prev = None
curr = head
while curr:
next_node = curr.next
curr.next = prev
prev = curr
curr = next_node
return prev
```
在这个示例中,我们定义了一个`Node`类来表示链表的节点。`reverse_linked_list`函数接受链表的头节点作为参数,并返回逆置后的链表的头节点。
函数中使用了三个指针`prev`、`curr`和`next_node`来进行逆置操作。首先,将`prev`初始化为`None`,`curr`初始化为头节点。然后,通过循环遍历链表,将当前节点的指针指向前一个节点,然后更新`prev`和`curr`指针,继续遍历下一个节点。最后返回逆置后的链表的头节点。
单链表的逆置数据结构
单链表的逆置,也称为链表反转,是指改变一个单链表中节点的顺序,使得原来的头节点变成新的尾节点,而原来的尾节点变成新的头节点。在不使用额外存储空间的情况下,可以通过迭代或递归的方法来实现这个过程。
**迭代法**:
1. 定义两个指针,一个指向当前节点(prev),一个指向当前节点的后继(current)。
2. 指针current开始时指向头节点,然后每次移动,同时更新prev指向current,current指向current的下一个节点,直到current为null。
3. 当current为null时,prev即为新的头节点。
**递归法**:
1. 定义一个辅助函数,传入当前节点(current)和前一个节点(prev,初始为null)。
2. 如果current为null,则返回,否则递归调用函数,将current的next赋值给current,然后返回current。
3. 最后返回null作为新的头节点,此时链表已经反转。
**相关问题--:**
1. 迭代法和递归法在链表逆置中的优缺点是什么?
2. 如何在Java中实现单链表的逆置?
3. 链表逆置后,原来的头节点和尾节点如何确定?