基础链表翻转操作

Posted justlittlestar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础链表翻转操作相关的知识,希望对你有一定的参考价值。

# 对于带头结点的单链表存在两种的翻转操作#

基本构造如下

技术图片

typedef int ElementType; 
typedef struct LNode *PtrToLNode;
typedef PtrToLNode Position;
typedef PtrToLNode List;
struct LNode {
    ElementType Data;
    PtrToLNode Next;
};

技术图片

将a1到an元素再依次以头插入的方式生成链表,实现链表reverse

 

List L;
 
/* L为带头结点链表, reverse头结点插入实现 */
List Reverse1(List L)
{ 
  
/* 头结点指向NULL, 再将后续节点头依次插入 */ Position p; /* 连接后续节点指针 */ Position cur; /* 当前工作指针 */ p = L->Next; /* 指向后续链表 */ cur = p; L->Next = NULL; /* 头结点分离 */ while ( p!=NULL ) /* 依次向下移动,直到为NULL */ { p = p->Next; /* 指向下一节点 */ /* 将当前节点插入L */ cur->Next = L->Next; L->Next = cur; cur = p; /* 移动到下个节点 */ } return L; }

技术图片

/* 链表翻转,各节点依次反转  */ 
List Reverse2(List L)
{   /* 使用3个指针指向前、中、后三个节点 */
    Position pre;
    Position cur;        /* 当前工作节点 */
    Position rear; 
    cur = L->Next;
    rear = cur->Next;
    
    cur->Next = NULL;       /* 初始操作 将第一个节点变为尾节点 */
    /* rear指向后节点,当rear==NULL,p则为最后节点 */
    while( rear!= NULL ) 
    {   /* 遍历处理 */ 
        pre = cur;       /* 指针依次后移 */
        cur = rear;
        rear = rear->Next;    
            cur->Next = pre;     /* 链表节点翻转 */ 
    } 
    L->Next = cur;           /* 头节点连接到翻转后的链表节点 */
    
    return L;
}

# 图片来自网络

#我的 原文发布在https://blog.csdn.net/SHIDACSDN/article/details/80295020


以上是关于基础链表翻转操作的主要内容,如果未能解决你的问题,请参考以下文章

25. k个一组翻转链表-LeetCode

翻转链表

25.K个一组翻转链表

25.K个一组翻转链表

高质量代码-翻转链表

数据结构 | 如何一文搞定链表问题?(附20本书获奖名单)