1. 程式人生 > >資料結構——演算法之(023)( 單鏈表就地逆置,頭插法)

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

【申明:本文僅限於自我歸納總結和相互交流,有紕漏還望各位指出。 聯絡郵箱:[email protected]

題目:

單向連結串列的就地逆置

題目分析:

一、方法很多,這裡使用頭插法

(1)順序遍歷連結串列,並把每個節點從新插入在頭結點後面

(2)其實就是簡單的頭插法建立連結串列的過程

演算法實現:

#include <stdio.h>
#include <stdlib.h>

typedef struct _list_node
{
	int        key;
	struct _list_node  *next;
}list_node;

void *list_insert(list_node *head, int key)
{
	list_node *p = head;
	while(p->next != NULL)
		p = p->next;
	list_node *node = calloc(1, sizeof(list_node));
	node->key = key;
	node->next = NULL;

	p->next = node;
}

void list_display(list_node *head)
{
    list_node *p = head->next;
    printf("list:");
    while(p != NULL)
    {
        printf(" %d", p->key);
        p = p->next;
    }
    printf("\n");
}

/*
** 頭插法
*/
list_node *list_reverse(list_node *head)
{
    list_node *p = head->next;
    list_node *q = NULL;
    head->next = NULL;
    while(p != NULL)
    {
        q = p->next;          /*儲存下一個節點*/
        p->next = head->next; /*把節點插入到頭結點後面*/
        head->next = p;       /*頭結點一直指向最新插入的節點*/
        p = q;                /*調整指標,指向下一個節點*/
    }
}

int main(int argc, char *argv[])
{
	list_node *head = calloc(1, sizeof(list_node));
	head->key = 0;
	head->next = NULL;

	list_insert(head, 1);
	list_insert(head, 2);
	list_insert(head, 3);
	list_insert(head, 4);
	list_insert(head, 5);

    list_display(head);
    list_reverse(head);
    list_display(head);
	return 0;
}


相關推薦

資料結構——演算法023 單鏈就地,

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

資料結構實驗連結串列三:連結串列的SDUT 2118

題目連結 #include <bits/stdc++.h> using namespace std; struct node { int data; struct no

資料結構實驗連結串列七:單鏈中重複元素的刪除SDUT 2122

#include <bits/stdc++.h> using namespace std; typedef struct node { int data; struct no

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

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

SDUT OJ 2122 資料結構實驗連結串列七:單鏈中重複元素的刪除

#include<iostream> #include<stdlib.h> using namespace std; typedef int ElemType; typedef struct LNode { ElemType data; stru

單鏈就地Java版

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

帶頭結點的單鏈就地10 分

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

sdut oj資料結構實驗連結串列五:單鏈的拆分

資料結構實驗之連結串列五:單鏈表的拆分 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 輸入N個整數順序建立一個單鏈表,將該單鏈表拆分成兩個子連結串列,第一個子連結串列存放了所有的偶數,第二

單鏈就地的高效演算法

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

資料結構——演算法032求兩個串中的第一個最長子串

【申明:本文僅限於自我歸納總結和相互交流,有紕漏還望各位指出。 聯絡郵箱:[email protected]】 題目: 求兩個串中的第一個最長子串(神州數碼以前試題).如"abractyeyt","dgdsaeactyey"的最大子串為"actyey".題目

資料結構——演算法033兩個有序單鏈合併為一個有序的單鏈

【申明:本文僅限於自我歸納總結和相互交流,有紕漏還望各位指出。 聯絡郵箱:[email protected]】 題目: 兩個有序單鏈表合併為一個有序的單鏈表(預設升序)題目分析: 1、因為兩個連結串列都是有序的,所以首先要記錄那個連結串列頭最小 2、大致

資料結構——演算法022 在字串中刪除特定的字元

【申明:本文僅限於自我歸納總結和相互交流,有紕漏還望各位指出。 聯絡郵箱:[email protected]】 題目: 輸入兩個字串,從第一字串中刪除第二個字串中所有的字元。例如,輸入”They are students.”和”aeiou”, 則刪除之後的第

資料結構——演算法031將字串中所有小寫字母排在大寫字母的前面

【申明:本文僅限於自我歸納總結和相互交流,有紕漏還望各位指出。 聯絡郵箱:[email protected]】 題目: 函式將字串中的字元'*'移到串的前部分,前面的非'*'字元後移,但不能改變非'*'字元的先後順序,函式返回串中字元'*'的數量。題目分析:

Javascript資料結構演算法排序一氣泡排序,插入排序,選擇排序

在計算機中儲存的資料執行的兩種最常見操作是排序和檢索。 本次介紹的是氣泡排序,插入排序,選擇排序三種基本排序演算法。其中外迴圈會遍歷陣列每一項,內迴圈則用於比較元素。其中原理參考逝者如斯,不捨晝夜的部落格園。 網頁展示 程式碼部分

資料結構演算法題/最大子序列一維陣列中和最大的連續子序列

1首先看一下 最大子序列。 最大子序列是要找出由陣列成的一維陣列中和最大的連續子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,達到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已經看出來了,找最大子序列的方法很簡單,只要前i項的和還沒有

資料結構演算法題/最大子矩陣二維陣列中和最大的連續子矩陣

給定一個矩陣,都是整數,求出其中的最大子矩陣。 可以將問題轉換為求一維陣列的最大子序列和的問題。具體見https://blog.csdn.net/fkyyly/article/details/83088247 /** * 其實思想是控制新的子矩陣開始,按列相加變成一維陣列,然後再求一維陣列

資料結構學習二叉樹面試易考題整理

【摘要】電腦科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。二叉樹是遞迴定義的,因此,與二叉樹有關的題目基本都可以用遞迴思想解決

"雙向連結串列"-資料結構演算法-通俗易懂,完全解析

1.概念的引入 相信大家都使用過各種集合來進行開發,但是較少的人會去研究其內部的儲存原理和呼叫方法,今天我就來帶大家一起學習資料結構演算法:雙向連結串列 首先我們先來了解什麼是快取,以及資料在記憶體中的儲存方式. 1.快取是什麼 如果cup讀取資料時