单链表就地反转

简介:

  实现一个函数:void reverse(struct list_node *head)在尽量不借助辅助变量的情况下,实现任意长度单链表(不考虑内存限制)的反转(or 逆序)。


struct list_node{
    int val;
    struct list_node *next;
};
 
struct list{
    struct list_node *head; 
    struct list_node *tail;
};
 
void reverse(struct list_node *head)
{
 
}
int main()
{
    struct list list = {NULL, NULL};
    struct list_node *p = NULL;
    /*init list*/
    /*打印反转前各节点的值*/
    reverse(list.head);
    p = list.head;
    list.head = list.tail;
    list.tail = p;
    /*打印反转后各节点的值*/
}

代码实现:


#include <stdio.h>
 
struct list_node{
    int index;
    struct list_node *next;
};
struct list
{
    struct list_node *head;
    struct list_node *tail;
};
void reverse(struct list_node *head)
{
    if(NULL == head|| NULL == head->next )
        return;
    reverse(head->next);
    head->next->next = head;
    head->next = NULL;
}
int main()
{
    int i = 0;
    struct list list = {NULL, NULL};
    struct list_node node[10] = {0};
    struct list_node *p;
    for(i = 0; i < 9; i++)
    {
        node[i].index = i;
        node[i].next = &node[i + 1];
    }
    node[9].index = 9;
    list.head = node;
    list.tail = node + 9;
     
    reverse(list.head);
    for(p = list.tail; p; p=p->next)
    {
        printf("%d \n",p->index);
    }
        return 0;  
}    

目录
相关文章
|
4月前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
53 1
|
5月前
【力扣题】关于单链表和数组习题
【力扣题】关于单链表和数组习题
29 2
|
5月前
【LeetCode 29】226.反转二叉树
【LeetCode 29】226.反转二叉树
40 2
|
9月前
|
算法
数据结构和算法学习记录——习题-翻转链表(不带表头结点逆置算法、带表头结点的链表逆置算法)
数据结构和算法学习记录——习题-翻转链表(不带表头结点逆置算法、带表头结点的链表逆置算法)
58 0
|
10月前
|
存储
三种方法实现获取链表中的倒数第n个元素
三种方法实现获取链表中的倒数第n个元素
87 0
|
10月前
|
C语言 C++ 索引
【力扣】141. 环形链表、160. 相交链表、206.反转链表、234. 回文链表
【力扣】141. 环形链表、160. 相交链表、206.反转链表、234. 回文链表
|
10月前
力扣 226.反转二叉树
力扣 226.反转二叉树
55 0
53 # 层序遍历跟反转二叉树
53 # 层序遍历跟反转二叉树
56 0
【Leetcode -234.回文链表 -160.相交链表】
【Leetcode -234.回文链表 -160.相交链表】
30 0
反转一个链表 力扣206
反转一个链表 力扣206题解
54 0