把单链表相邻元素反转

//函数功能:把链表相邻元素反转
//输入参数:head:指向链表头结点

void reverse(Node* head){

    if (head == NULL || head->next == NULL)
        return ;

    Node *pre = head, *cur = head->next, *next = NULL;
    while (cur != NULL && cur->next != NULL) {
        next = cur->next->next;
        pre->next = cur->next;
        cur->next->next = cur;
        cur->next = next;

        pre = cur;
        cur = next;
    }

}

原文地址:https://www.cnblogs.com/fuqia/p/10262485.html

时间: 2024-10-18 20:27:36

把单链表相邻元素反转的相关文章

Leetcode:Swap Nodes in Pairs 单链表相邻两节点逆置

Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only constant space. You may not modify the values in the list, on

单链表(包含反转、导出、循环链表思路)

生活永远是自己的,美哉美哉.实习告一段落,大学也算彻底结束,就像毛不易唱的二零三,给我想要的自由.最近学习汇编及数据结构(C语言),链表也总算告一段落,本篇是单链表的学习代码笔记,本来也想想每一步都做图,分享知识,让更多的朋友去学习,但是本人局限于能力,图片无法表达自己想要的描述,所以干脆不做图了.随后日子会有双链表的操作,后面仍然会分享栈.队列的自学笔记,也可能写汇编8086的心得,希望大家一起共勉.代码可能有些繁琐(很多地方都可以优化),只是新手 给 新手的一些参考反转链表用的迭代思路参考(

单链表创建与反转

#include <iostream> #include <fstream> using namespace std; struct LinkNode { int data; LinkNode* next; }; LinkNode* createLink(LinkNode* head) { ifstream fin; fin.open("list.txt"); if(!fin){ cout << "open file failed.....

算法初探001——单链表反转

单链表的反转问题是一道很基本的问题.题目如下: 有一个单链表 1 ->2->3->4->5->6 反转后链表为:6->5->4->3->2->1. 方法一 解析:可以使用三个指针pre ,temp,next对逐个节点进行反转.详细流程如下: (4) 初始状态 pre = head; tmp = head->next; pre->next = null; (2)第一次循环: next = tmp->next; tmp->ne

从单链表中删除最大的元素,单链表元素排序

public class LinkList { public Node head; public LinkList() { head = new Node(); head.next = null; } //尾插法 public void createByTail(int[] arr, int n) { Node tail = head; for(int i=0; i<n; i++) { Node c = new Node(arr[i]); tail.next = c; tail = c; } t

单链表的算法

要点 单链表的结构可表示如下: typedef int ElemType; typedef struct LNode { ElemType data; struct LNode* next; } LNode, *LinkList; 基本算法 插入结点 假设要在单链表的a结点和b结点之间插入一个值为x的新结点. 如下图所示,指针s指向一个值为x的结点,为了插入s. 首先让s的next指针指向b,即s->next = p->next; 然后,让a的next指针指向s,即p->next = s

如何使用C++实现单链表

线性表--链表 为什么假期也在发文章 //TODO NullGirlfrindException 请忽略以上两行无聊的事实...... 如何弥补顺序表的不足之处? 第一次学习线性表一定会马上接触到一种叫做顺序表(顺序存储结构),经过上一篇的分析顺序表的优缺点是很显然的,它虽然能够很快的访问读取元素,但是在解决如插入和删除等操作的时候,却需要移动大量的元素,效率较低,那么是否有一种方法可以改善或者解决这个问题呢? 首先我们需要考虑,为什么顺序表中的插入删除操作会涉及到元素的移动呢? 好家伙,问题就

线性表—单链表

.1.链式存储结构实现 单链表和双链表(这边讲单链表). 2.基础概念 a.结点:结点由数据域和地址域(链)两部分组成.而结点整体在效果上可以看作是该结点的地址(指针).这个地址域一般是后继元素的地址(即下一个结点的总体).所以最后一个元素的地址域为^,其表示空,即没有后续元素.b.单链表:每个结点只有一个地址域的线性链表称为单链表.c.双链表:每个结点有两个地址域的线性表链称为双链表,两个地址域分别指向前驱元素和后继元素. 3.单链表的实现 线性表接口LList: package com.cl

Java数据结构-线性表之单链表LinkedList

线性表的链式存储结构,也称之为链式表,链表:链表的存储单元可以连续也可以不连续. 链表中的节点包含数据域和指针域,数据域为存储数据元素信息的域,指针域为存储直接后继位置(一般称为指针)的域. 注意一个头结点和头指针的区别: 头指针: 指向链表的第一个节点的指针,若链表有头结点,则是指向头结点的指针: 头指针具有标识作用,所以常用头指针作为链表的名字: 不论链表是否为空,头指针都不为空: 是链表的必要元素. 头结点: 头结点是为了操作的统一和方便而设立的,放在第一个元素节点的前面,其数据域一般无意