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