单链表的逆向打印、删除无头的非尾节点、无头链表插入节点、约瑟环

//1、逆向打印链表(递归)
void PrintTailToHead(ListNode *pHead)
{
                ListNode *cur = pHead;
                 if(cur != NULL)
                {
                                PrintTailToHead(cur->_next);
                                printf( "%d ",cur->_data);
                }
}
//2、删除无头链表中的非尾节点
void DelNoTail(ListNode *pos)
{
                assert(pos && pos->_next );
                ListNode *next = pos->_next ;
                swap(pos->_data ,next->_data );
                pos->_next = next->_next ;
                free(next);
}
//3、无头链表非头结点前插入一个节点
void InsertNoHead(ListNode * pos, DataType x)
{
                ListNode *tmp = BuyNode(pos->_data );
                tmp->_next = pos->_next;
                pos->_next = tmp;
                pos->_data = x;
}
//4、约瑟夫环问题(假设是一个循环单链表)
ListNode* Josephuscycle(ListNode *pHead, DataType x)
{
                ListNode *cur = pHead;
                 while(1)
                {
                                 if(cur = cur->_next )
                                {
                                                 return cur;
                                }
                                DataType m = x;
                                 while(--x)
                                {
                                                cur = cur->_next ;
                                }
                                ListNode *next = cur->_next ;
                                swap(cur->_data ,next->_data);
                                cur->_next = next->_next ;
                                free(next);
                }
}
时间: 2024-08-06 10:10:22

单链表的逆向打印、删除无头的非尾节点、无头链表插入节点、约瑟环的相关文章

(二)单链接表的实现之从尾部插入节点

(二)单链接表的实现之从尾部插入节点 从尾部插入节点构建一个简单的列表什么是头节点 从尾部插入节点 从尾部插入节点??如上图所示,只要将创建的节点的pNext指针指向下一节点地址即可:pHeader->pNext = New;??从尾部插入节点分成两个步骤: 找到链表的最后一个节点: 将新的节点和原来的最后一个节点链接起来. 1/* 2 *pH : 表示链表的头指针 3 *new: 新节点的首地址 4 */ 5void insert_tail(struct node *pH,strtuct no

7、链表(下):如何轻松写出正确的链表代码?

很汗颜,现在让自己完整的写出一个简单的链表结构竟然会无法动笔,作为一个程序猿,需要修行的路还很长. 技巧一:理解指针或引用的含义 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量. 例子: p->next = q.这行代码的意思是p节点的next指针存储了q节点的内存地址. 同理, p->next = p->next->next.这行代码的意思是p节点的next指针存储了p节点的下下一

C语言:【单链表】删除一个无头单链表的非尾节点

#include<stdio.h> #include<assert.h> #include<stdlib.h> typedef int DataType; typedef struct SListNode {     DataType data;     struct SListNode* next;  }SListNode; SListNode* BuyNode( DataType x) {     SListNode* next = (SListNode*)mall

【C语言】单链表的相关热点面试题(包括:从尾到头打印,逆置,冒泡,寻找中间节点,倒数k节点)

从尾到头打印单链表 void FromTailToHeadPrint(SListNode*& head) {     stack<SListNode*> s;     SListNode* cur = head;     while (cur)     {         s.push(cur);         cur = cur->_next;     }     while (!s.empty())     {         cout << s.top()-&

单链表的使用(插入,查找,删除,链表的倒置,删除相同结点)

typedef struct node//该结构体代表一个结点{ int data; //结点的数据域 struct node *next; //结点的指针域}lnode,*linklist; //定义一个结构体变量和指向结构体的指针//用头插法创建一个链表linklist create_begin(){ linklist head=(linklist)malloc(sizeof(lnode));//定义头结点并开辟空间 head->next=NULL; //为避免指针乱指,将头结点下一个指针赋

使用OC实现单链表:创建、删除、插入、查询、遍历、反转、合并、判断相交、求成环入口

一.概念 链表和数组都是一种线性结构,数组有序存储的,链表是无序存储的. 数组中的每一个元素地址是递增或者递减的关系,链表的每一个节点的地址没有此规律,它们是通过指针的指向连接起来. 链表种类:单链表.双向链表.循环链表.双向循环链表 单链表:一个数据域data.一个后继指针域next.也即:上一个节点指向下一个节点,尾节点指向空. 双向链表:一个数据域data.一个前驱指针域previous.一个后继指针域next.也即:上一个节点和下一个节点互相指向,尾节点指向空. 循环链表:一个数据域da

链表创建打印删除

链表创建打印删除:http://wenku.baidu.com/view/d2343df67c1cfad6195fa7d8.html http://bbs.ednchina.com/BLOG_ARTICLE_2143077.HTM http://zhidao.baidu.com/link?url=vdWWhzPcyNykH1NSG-EdhHnPAsmTS6VDSmm-hMZU7GZPi7-w5s-WRpANOCat9y7C5xQHYLjwjPQWeZj9yb_91q http://www.2ct

链表-1 链表中数据的删除

http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1068 这是一个在链表中删除特定字符的代码,学习链表后第一次编写的一个代码. 1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 #include <algorithm> 5 #include <math.h> 6 using namespac

链表的倒序打印

问题描述:给定一个单链表的头结点,将链表逆序打印,并且要求不能改变链表的结构. 分析:考察对链表的理解,题目要求我们不能改变链表结构,但是链表是个单链表,只能向后指,不能向前指,这时我们可以采用其他数据结构来辅助, 根据单链表性质,要从头开始访问,但是却要最先打印最后的节点,这是属于典型的先访问后输出的特点,因此可以用栈来辅助,将先访问到的节点依次 入栈,入栈完后,开始出栈打印,可以符合题目要求.我们具体在编程时,可以采用栈结构,还可以使用递归,因为递归本质上是用栈来实现的.但是如果 链表太长的