1. 程式人生 > >單鏈表反轉(帶頭結點版)

單鏈表反轉(帶頭結點版)

#ifndef REVERSE_LIST_H_INCLUDED
#define REVERSE_LIST_H_INCLUDED

LinkList reverse_list(LinkList head)
{


LinkList p1=head;//p1指向頭結點
LinkList p2=p1->next;//p2是第一個資料
LinkList p3;
while(p2!=NULL)
{
  p3=p2->next;
  p2->next=p1;
  p1=p2;
  p2=p3;
}
p2=(LinkList)malloc(sizeof(LNode));//將內容為NULL的p2重新分配空間 作為你像連結串列的頭結點
p2->next=p1; //頭結點連上第一個資料 head->next->next=NULL;//head->next是第一個資料 要讓第一個資料裡的next指向NULL 使第一個資料變成尾巴 head=p2; //頭指標指向頭結點 return head; } #endif // REVERSE_LIST_H_INCLUDED

尤其注意尾節點的處理
由於是帶有頭結點的 所以要用head->next->next跳過原連結串列的頭結點,直接將原第一個資料的next指向NULL

所謂頭結點就是一個空的,可有可不有。頭指標指向頭結點、

相關推薦

單鏈反轉帶頭結點

#ifndef REVERSE_LIST_H_INCLUDED #define REVERSE_LIST_H_INCLUDED LinkList reverse_list(LinkList head) { LinkList p1=head;//p1指向頭結

資料結構篇:單鏈倒置帶頭結點/不帶頭結點

帶頭結點 初始化如圖 1.我們需要把1這個結點作為最後一個結點,所以要把1的next指向NULL h->next->next = nullptr;   2.然後我們要新建結點,指向HeadNext的下一位,並把HeadNext的下一位指向HeadP

帶頭結點單鏈操作頭插法-c++

span str out let 單鏈表 null 頭結點 操作 truct c++編寫 帶頭結點的單鏈表操作(頭插法)(和c語言差不多) #include<iostream> #include<conio.h> using namespa

單鏈反轉關鍵詞:連結串列/單鏈/反轉/逆轉/逆置

單鏈表反轉 一點解釋 可以拿 1 種最簡單的情況為例,2 個結點的單鏈表,紙筆畫示意圖,程式碼很好理解,不做詳細解釋了。 實現方法 1 def reverseList(head): prev = None while head is not None: cur

【程式設計2】單鏈+單鏈反轉LeetCode. 206

文章目錄 一、連結串列 二、單鏈表 1、基本概念 (1)單鏈表 (2)頭指標——必有元素 (3)頭結點——非必需元素 (4)尾結點 2、查詢操作

java單鏈反轉花了半個多小時的作品

歡迎光臨............... 首先我們要搞清楚連結串列是啥玩意兒?先看看定義:         講連結串列之前我們先說說Java記憶體的分配情況:我們new物件的時候,會在java堆中為物件分配記憶體,當我們呼叫方法的

單鏈反轉Java實現遞迴

要求很簡單,輸入一個連結串列,反轉連結串列後,輸出新連結串列的表頭。使用遞迴實現 package com.lyh.seckill.test; public class ReLinkedList { private static class Node{ pri

單鏈反轉遞迴和非遞迴

單鏈表反轉有遞迴和非遞迴兩種演算法。 下面定義節點 typedef struct ListNode{ int value; ListNode* next; }ListNode; 在遞迴演算法中的做法是: 1找到最後一個節點和倒數第二個節點,把最後一個節點設為頭節點的

單鏈反轉三種方法總結

題目:輸入一個連結串列,反轉連結串列後,輸出連結串列的所有元素。 方法一: 思路:從原連結串列的頭部一個一個取節點並插入到新連結串列的頭部 (1) struct ListNode{ int val; struct ListNode *nex

單鏈反轉C++

單鏈表是很基礎的演算法題 有至少三種方法可以實現: 1:將單鏈表儲存為陣列,然後按照陣列的索引逆序進行反轉。 2:使用三個指標遍歷單鏈表,逐個連結點進行反轉。 3:從第2個節點到第N個節點,依次逐節點插入到第1個節點(head節點)之後,最後將第一個節點挪到

java不用api實現單鏈反轉

這篇部落格主要講述反轉連結串列相關思路。兩種方法:時間複雜度均為O(n),空間複雜度均為O(1) 方法一:頭插法 頭插法不僅可以建立單鏈表,還可以利用其思路反轉連結串列。首先把頭節點拆下,剩下的節點依次遍歷,採用頭插法,相當於從新建立連結串列。 p

單鏈1悲劇文本

over delete stream oid type cout null out PE #include"iostream" using namespace std; typedef char element; class List{ private: elem

6-1 單鏈逆轉20 point(s)

本題要求實現一個函式,將給定的單鏈表逆轉。 函式介面定義: List Reverse( List L ); 其中List結構定義如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 儲存結點資料 */

C語言實現單鏈節點的刪除帶頭結點

data art pos grand urn ria tps move sni 我在之前一篇博客《C語言實現單鏈表節點的刪除(不帶頭結點)》中具體實現了怎樣在一個不帶頭結點的單鏈表的刪除一個節點,在這一篇博客中我改成了帶頭結點的單鏈表。代碼演示樣例上傳至 h

C語言實現單鏈的節點插入帶頭結點

alloc tails 函數 file ret con 實現 單獨 fun 我在之前一篇博客《C語言實現單鏈表(不帶頭結點)節點的插入》中具體實現了怎樣在一個不帶頭結點的單鏈表中進行節點的插入。可是在實際應用中,帶頭結點的鏈表更為經常使用。更為方便。今天我們

單鏈的建立帶頭結點以及不帶頭結點

不帶頭結點 #include "stdio.h" #include "stdlib.h" typedef struct List { int data; //資料域 struct List *next; //指標域 } List; List * HeadCreatList() //頭插法建立

經典演算法學習——單鏈實現氣泡排序帶頭結點

核心程式碼如下:Node *BubbleSort(Node *pNode){ int count = SizeList(pNode);//用來控制次數 Node *pMove;

單鏈帶頭結點的刪除

1.問題描述給出初始資料,實現單鏈表的定義、建立、查詢和刪除。假設單鏈表中的結點計數從1開始。2.演算法單鏈表結點的儲存結構包含兩部分:資料、下一結點指標。單鏈表的建立:依次為輸入的資料分配結點,並按序連結起來。單鏈表的查詢:給出位置i,若第i個結點存在(1<=i<=表中結點數L),返回結點地址;

C實現頭插法和尾插法來構建單鏈帶頭結點

核心程式碼如下://建立帶頭結點的單鏈表(尾插法) void CreateListTailInsert(Node *pNode){ /** * 就算一開始輸入的數字小於等於0,帶頭

資料結構c語言中線性單鏈儲存結構

本文轉自:https://blog.csdn.net/prlhnxx/article/details/79174782 /* run this program using the console pauser or add your own getch, system("pause") or i