单链表就地反转

简介:

  实现一个函数: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;  
}    

目录
相关文章
|
2月前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
43 1
|
3月前
【LeetCode 29】226.反转二叉树
【LeetCode 29】226.反转二叉树
29 2
|
8月前
|
C语言 C++ 索引
【力扣】141. 环形链表、160. 相交链表、206.反转链表、234. 回文链表
【力扣】141. 环形链表、160. 相交链表、206.反转链表、234. 回文链表
|
8月前
|
算法 程序员
【算法训练-链表 一】【反转链表】反转链表、区间反转链表、K个一组反转链表
【算法训练-链表 一】【反转链表】反转链表、区间反转链表、K个一组反转链表
82 0
53 # 层序遍历跟反转二叉树
53 # 层序遍历跟反转二叉树
54 0
反转链表的升级版——链表内指定区间反转
反转链表的升级版——链表内指定区间反转
【Leetcode】反转链表 合并链表 相交链表 链表的回文结构
【Leetcode】反转链表 合并链表 相交链表 链表的回文结构
107 0
反转一个链表 力扣206
反转一个链表 力扣206题解
51 0
刷题之反转部分单向链表
刷题之反转部分单向链表
53 0