1. 程式人生 > >就地逆置帶頭結點的單鏈表

就地逆置帶頭結點的單鏈表

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
/*
    2017年3月20日20:13:49
    就地逆置
    首先要了解“就地逆置”的含義:不再需要額外的空間來儲存這個連結串列中的任何節點的資料域。而不是不需要任何空間。比如下面的例子就需要兩個指標的空間。
    思路:①將原來的頭結點拆下來,作為新的逆置連結串列的頭結點
          ②將原來連結串列的各個節點,依次拆卸下來,然後按照頭插法,插入到逆置連結串列當中
          ③迴圈,直到原來的連結串列為空即可。
*/

typedef struct Node{
    int data
; struct Node * next; }Node;//定義節點型別 void initList(Node * & List); int addElement(Node * list,int x); void printList(Node * list); void ReverseList(Node * list); int main(void) { Node * list; initList(list); for(int index=10;index>0;index--) { addElement(list,index);//採用一個迴圈來給這個連結串列賦值1,2,3,4,5,6,7,8,9,10
} printList(list);//打印出來的是1,2,3,4,5,6,7,8,9,10 ReverseList(list); printList(list);//打印出來的是10,9,8,7,6,5,4,3,2,1 system("pause"); return 0; } void initList(Node * & List)//初始化連結串列。//需要傳引用型,因為需要list所指向的單元要改變。 { List=(Node*)malloc(sizeof(Node)); memset(List,0,sizeof(Node));//注意,通過memset,可以直接對其進行初始化。
return; } int addElement(Node * list,int x)//頭插法建立連結串列//不用傳引用型的list,因為list始終指向的是頭結點 { Node * now; now=(Node*)malloc(sizeof(Node)); if(now!=NULL){ now->data=x; now->next=list->next; list->next=now; return 1; }else{ printf("申請空間失敗!\n"); return 0; } } void printList(Node * list)//列印連結串列//不用傳引用型的list,因為list始終指向的是頭結點 { Node * p; p=list->next; while(p!=NULL) { printf("%d\n",p->data); p=p->next; } } void ReverseList(Node * list)//不用傳引用型的list,因為list始終指向的是頭結點 { Node *p,*q; p=list->next; list->next=NULL; while(p!=NULL) { q=p->next; p->next=list->next; list->next=p; p=q; }//while }

相關推薦

就地帶頭結點單鏈

#include<stdio.h> #include<stdlib.h> #include<iostream> /* 2017年3月20日20:13:49 就地逆置 首先要了解“就地逆置”的含義:不再需

真題2002 兩個帶頭結點單鏈的連線

真題2002 兩個帶頭結點單鏈表的連線 題目:設計一個演算法,將一個帶表頭結點的單鏈表Y,連線到另一個帶表頭結點單鏈表X之後。單鏈表的每個結點有兩個域:data和link。要求寫出型別定義。 演算法思想:先找到一個連結串列的尾結點,再與另一個連結串列的頭結點連線 Typedef stru

帶頭結點單鏈

Link.h typedef int ELEM_TYPE; typedef struct Node { ELEM_TYPE data; struct Node* next; }Node,*PNode; void Init(PNode* phead); PNode B

6-1 帶頭結點單鏈就地

本題要求編寫函式實現帶頭結點的單鏈線性表的就地逆置操作函式。L是一個帶頭結點的單鏈表,函式ListReverse_L(LinkList &L)要求在不新開闢節點的前提下將單鏈表中的元素進行逆置,如原單鏈表元素依次為1,2,3,4,則逆置後為4,3,2,1。 函式

PTA 6-1 帶頭結點單鏈就地

6-1 帶頭結點的單鏈表就地逆置 (10 分) 本題要求編寫函式實現帶頭結點的單鏈線性表的就地逆置操作函式。L是一個帶頭結點的單鏈表,函式ListReverse_L(LinkList &L)要求在不新開闢節點的前提下將單鏈表中的元素進行逆置,如原單鏈表元素依次為1,

6-89 帶頭結點單鏈就地 (10 分)

6-89 帶頭結點的單鏈表就地逆置 (10 分) 本題要求編寫函式實現帶頭結點的單鏈線性表的就地逆置操作函式。L是一個帶頭結點的單鏈表,函式ListReverse_L(LinkList &L)要求在不新開闢節點的前提下將單鏈表中的元素進行逆置,如原單鏈表元素依次為

帶頭結點單鏈就地 (10 分)

本題要求編寫函式實現帶頭結點的單鏈線性表的就地逆置操作函式。L是一個帶頭結點的單鏈表,函式ListReverse_L(LinkList &L)要求在不新開闢節點的前提下將單鏈表中的元素進行逆置,如原單鏈表元素依次為1,2,3,4,則逆置後為4,3,2,1。 函式介面定義: voi

帶頭結點單鏈就地

本題要求編寫函式實現帶頭結點的單鏈線性表的就地逆置操作函式。L是一個帶頭結點的單鏈表,函式ListReverse_L(LinkList &L)要求在不新開闢節點的前提下將單鏈表中的元素進行逆置,如原單鏈表元素依次為1,2,3,4,則逆置後為4,3,2,1。 函式

帶頭結點單鏈就地(10 分)

程式碼都不會寫了== //庫函式標頭檔案包含 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<iostream> //函式狀態碼定

帶頭結點單鏈實現就地的更優方法

在習慣上,我們在實現連結串列的逆置時都會採用從第一個結點開始遍歷並不斷將連結串列的指向逆置的方法,但這樣做效率其實不高。假設要逆置的連結串列為L,更好的方法是先用指標p儲存L-〉next,再將連結串列L的頭結點置為Null,亦即L-〉next=Null,而後將p所指向的原存

PTA(資料結構)-帶頭結點單鏈就地

本題要求編寫函式實現帶頭結點的單鏈線性表的就地逆置操作函式。L是一個帶頭結點的單鏈表,函式ListReverse_L(LinkList &L)要求在不新開闢節點的前提下將單鏈表中的元素進行逆置,如原單鏈表元素依次為1,2,3,4,則逆置後為4,3,2,1

資料結構:單鏈就地

6-1 帶頭結點的單鏈表就地逆置(10 分)   本題要求編寫函式實現帶頭結點的單鏈線性表的就地逆置操作函式。L是一個帶頭結點的單鏈表,函式ListReverse_L(LinkList &L)要求在不新開闢節點的前提下將單鏈表中的元素進行逆置,如原單鏈表元素依次為1

單鏈(頭插法和就地

今天課間的時候偶然看到了一個面試題:單鏈表的逆置,看了題解感覺乖乖的,貌似和以前看的版本不搭,於是重新進行了一番探究 單鏈表的逆置分為兩種方法:頭插法和就地逆置法,這兩種方法雖然都能夠達到逆置的效果,但還是有著不小的差別 頭插法 演算法思路:依

C語言:單鏈實現(二) 就地就地歸併

#include<iostream> #include<stdio.h> #include<math.h> #define LEN sizeof(struct Nodelist) using namespace std; typedef

單鏈就地(頭插法和遞迴法)【轉】

單鏈表的就地逆置是指輔助空間O(1)的逆置方法,有兩種方法:普通迴圈(頭插法重新建立帶頭節點的新連結串列)和遞迴。下面我們詳細介紹這兩種方法: 方法一:頭插法 演算法思想:逆置連結串列初始為空,表中節點從原連結串列中依次“刪除”,再逐個插入逆置連結串列的表頭(即“頭插

試分別以順序單鏈作儲存結構,各寫一實現線性就地的演算法

對陣列的倒置void SeqList<DataType>::inversion() { int i = 0, j = length - 1; DataType temp;

單鏈就地遞迴與非遞迴的方法

//1.用遞迴演算法,對於不帶頭結點的單鏈表(a1,a2,a3,a4,a5,a6)逆置後的結果為(a6,a5,a4,a3,a2,a1) //考慮遞迴演算法,若只有一個結點,則直接返回,若存在兩個結點(a1,a2)則需要做的操作有:      a2->next=a1;a

單鏈就地的高效演算法

單鏈表(不妨帶頭節點)就地逆置的高效演算法: linklist *ReverseLklist(linklist *L) { linklist *p = L->next; linklist *q = NULL; linklist *h = NULL; while

資料結構——演算法之(023)( 單鏈就地,頭插法)

【申明:本文僅限於自我歸納總結和相互交流,有紕漏還望各位指出。 聯絡郵箱:[email protected]】 題目: 單向連結串列的就地逆置 題目分析: 一、方法很多,這裡使用頭插法 (1)順序遍歷連結串列,並把每個節點從新插入在頭結點後面 (2)

單鏈就地(Java版)

題目:有一個線性表(a1,a2,a3,...,an),採用帶頭節點的單鏈表L儲存,設計一個演算法將其就地逆置,線性表變為(an,...a3,a2,a1)。所謂“就地”指輔助儲存空間為O(1)。