链表模板总结

单链表:

public class ListNode {
  int val;
  ListNode next;
  ListNode (int val) {
    this.val = val;
  }
}

1、反转单链表

public void reverseLinkedList(ListNode head) {
  ListNode pre = null;
  while (head != null) {
    ListNode next = head.next;
    head.next = pre;
    pre = head;
    head = next;
  }
  return pre;
}

2、寻找单链表的中点

public ListNode findMid(ListNode head) {
  ListNode slow = head;
  ListNode fast = head;
  while (fast != null && fast.next != null) {
    fast = fast.next.next;
    slow = slow.next;
  }
  return slow;
}

时间: 2024-10-12 08:02:24

链表模板总结的相关文章

单向链表模板

写个单向链表模板练练手: #include <bits/stdc++.h> using namespace std; //create // delete // modify // search class Node{ public: int data; Node* ptr; Node(int elem= 0, Node* node= NULL){ this->data= elem; this->ptr= NULL; } }; class MyList{ private: Node

C++ 单链表模板类实现

单链表的C语言描述 基本运算的算法--置空表.求表的长度.取结点.定位运算.插入运算.删除运算.建立不带头结点的单链表(头插入法建表).建立带头结点的单链表(尾插入法建表),输出带头结点的单链表 #include<cstdio>#include<iostream>using namespace std;template <class T>class Linklist{private: struct node { T date; node * next; node():n

C++数据结构 单链表(模板类)

利用模板类实现单链表及其功能 需要实现的操作: [1] push_back       [2] push_front [3] show_list       [0] quit_system [4] pop_back        [5] pop_front [6] insert_val      [7] delete_val [8] find            [9]length [10] clear          [11]destroy [12] reserv         [13]

List链表模板类的简单实现(部分方法递归操作)

善哉. 此篇博客,旨在剖析下操作单链表时的递归思想.望各位施主笑纳. 1. 递归删除结点 * 空链表 - 直接返回 * 非空,若未找到待删除元素,递归.若找到,删除节点,返回尾链头 * 回溯,衔接形成新链 1 _Node* myErase_R(const Object& elem, _Node* curr){ 2 //空链 或 无此元素 3 if (curr == NULL) return NULL; 4 5 if (curr->elem == elem){ 6 _Node* tmp = c

【块状链表】AutSky_JadeK的块状链表模板+总结(STL版)

Part 1.块状链表.   定位 插入 删除 数组 O(1) O(n) O(n) 链表 O(n) O(1) O(1) 对于线性表的以上常见操作来说,数组和链表都无法有效地解决.但是,若我们将链表的每个节点存成一个数组,使得链表里每个节点的数据拼接起来就是原先的线性表中的内容(即块状链表),并且数组的大小合适的话,以上的操作都能比较好地解决了.根据均值不等式,若每个块的大小定为sqrt(n)左右最优,此时块数也是sqrt(n)左右,易证.以下是块状链表的基础操作的思想.复杂度和代码. 一.声明.

链表模板c++

关于链表的数据成员和一般的方法 下面是头文件: template <class T> class QueueTp{ private: struct Node{T item; struct Node * next;}; enum {Q_SIZE=10}; Node *front; Node *rear; int items; const int qsize; QueueTp():qsize(0){}; QueueTp &operator=(const QueueTp &q) {r

C++链表模板类

思想和上篇文章差不多,只是换了层包装. 直接上代码: // linklist.h #include <iostream> #include <cstdio> using namespace std; template <typename T> struct Node { T t; Node<T> *next; }; template <typename T> class LinkList { public: LinkList(); ~LinkLi

单链表(模板类)

#include<iostream>#include<assert.h>using namespace std; template <class T>struct Node{ Node(const T& x) :_data(x) , _pNext(NULL) { } Node<T> *_pNext; T _data;};template <class T>class SList{public: SList() :_pHead(NULL)

链表模板、队列模板、顺序表模板、栈模板、

//利用容器适配器实现栈和队列 #pragma once #include<iostream> #include<string> #include<cassert> using namespace std; template<typename T> struct Node { public: Node(const T& d) :_next(NULL) , _prev(NULL)     ,_data(d){} T _data; Node<T&g