学习日记[13]

更新於 發佈於 閱讀時間約 8 分鐘

今天主要做了三件记忆深刻的事。

第一件事是双向表的创建,我设想的是两种方式。假设一个节点有两个指针,前面的称为before,后面的称为next。第一种方式就是before和next相互连接,这样我做了两个程序,都是因为过于混乱,两个相互赋值的语句让所有节点都一致,和头节点一样。所以似乎只有第二种方式才能建立,就是before之间相互连接,next之间相互连结。这样,before就是和next相反的操作——反向遍历。这种方式和前面一样,有向前连接和向后链接两种方式,下面就是代码。

package Linked_Double_Behind_Notfor_Nohead;

// next data before,这里的head和before是按照遍历顺序定的,从左到右为正,所以左边的next为头;相反,before是反向遍历,所以在后面;
class Node
{
Node next;
int data;
Node forward;
public Node(int data)
{
this.next = null;
this.forward = null;
this.data = data;
}
}
public class linked_Double_Notfor
{
private Node head;
private Node sec_head;
public linked_Double_Notfor()
{
this.head = null;
this.sec_head = null;
}
public void addList(int data)
{
Node newNode = new Node(data);
if(head == null)
{
head = newNode;
sec_head = newNode;
}
else
{
Node temp = head;
while(temp.next != null)
{
temp = temp.next;
}
temp.next = newNode;
newNode.forward = sec_head;
sec_head = newNode;
}
}
public void calculateSum()
{
int sum = 0;
Node current = head;
System.out.print("每一个值是:\n");
int i = 0;
while (current != null)
{
sum += current.data;
i++;
System.out.printf("%3d%c", current.data, i % 10 == 0 ? '\n' : 32);
current = current.next;
}
System.out.println("\n总和是:" + sum); // 打印总和
}
public static void main(String[] args)
{
linked_Double_Notfor text = new linked_Double_Notfor();
for(int i = 1 ; i <= 100 ; i++)
{
text.addList(i);
}
text.calculateSum();
}

}

这个是向后插入方法

package Linked_Double_Forward_Not_Nohead;



//创建节点类
class Node
{
//定义所需要的属性
Node before;
int data;
Node next;
//初始化节点
public Node(int data)
{
this.before = null;
this.data = data;
this.next = null;
}
}
//创建链表类
public class LinkedList
{
//属性创建
Node head;
Node tail;
//链表类的初始化
public LinkedList()
{
this.head = null;
this.tail = null;
}
//添加节点
public void add_Node(int data)
{
//创建新节点
Node newNode = new Node(data);
//验证链表是否存在,同时链接节点
if(head == null)
{
//如果不存在,我们就将新节点作为第一个节点
head = newNode;
tail = newNode;
}
else
{
//如果存在,就需要找到相应的位置进行链接
Node temp = head;
newNode.next = temp;
head = newNode;
temp.before = newNode;
}
}
//测试程序
public void calculateSum()
{
int sum = 0;
Node current = tail;
System.out.print("每一个值是:\n");
int i = 0;
while (current != null)
{
sum += current.data;
i++;
System.out.printf("%3d%c", current.data, i % 10 == 0 ? '\n' : 32);
current = current.before;
}
System.out.println("\n总和是:" + sum); // 打印总和
}
public static void main(String[] args)
{
LinkedList text = new LinkedList();
for(int i = 1 ; i <= 100 ; i++)
{
text.add_Node(i);
}
text.calculateSum();
}
}

这个是向前插入方式。

这两者之间其实差别挺大的。总体来说,这两种插入方式不适合单独来讲,每种方式里面都有另外一种方式的影子。最好还是用画图的方式理解,这是我的感悟,在做一件事情之前,必须把思路理清楚确保他是相对合理的,然后再按照这个思路去做。我就是太急忙了,这两个东西搞了近两小时,实在不应该。图一点更要清楚,图一定要清楚,图一定要清楚。

第二件事就是读了一篇随笔,蒙田的《论我们的行为变化多端》。这篇随笔里,蒙田所认为的人应该是行为的集合体,而不是个体的多重方面。这样看也不是不无道理,因为构成我们的是行为,所以即使做错了事也不会神化它,错了就必须改正,这样我们不会片面地看待一个人。蒙田说人的变化多端是人性中最普遍也是最劣质的特性,我们不能仅仅依据生活和外表简单的评判一个人。人的种种行为是在多方面的影响下由个人做出的应激性判断,这里可以是金钱、名利、理想等等。要评价一个人必须要探究其行动背后的能量来源,由一个人的本质延伸到评价。我是很赞同的,我个人的经历也是告诉我这样,行动是多变的,只有我们自己的内心是唯一的,我们内心的能量供给行为才是始终不变的,比如一些动物本能——饥饿,困倦或者是各种情绪。尽管在类似情境中,这些都会变化,但他们却总是存在而不是说有一天会消失,当然,这里考虑的是生前的事情。变得始终如一,所有的行动都是由内心世界自助供能而不是外界供能,像性恶论一样,通过内心的建设,净化令人厌恶的一切,最终死的时候是洁白一身。

第三件事就是体育课的突发奇想。昨天说过,大部分学科之间都是有联系的,这之中,体育是身体,是几乎所有行动的本源。所以上心还是有必要的。

各位,晚安。




avatar-img
0會員
20內容數
这个专题是我个人的学习日记,每日会更新,内容很乱,请多见谅。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
在創作的路上真的很多人問我說 到底要怎麼做出符合自己期待 但又可以表現得很有美感的作品?🥹 這個問題真的應該是每個創作者都一直在學習的課題吧!
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
在資料結構與演算法裡, 最簡單的線性資料結構除了list之外就是linked list鏈結串列了。 Linked list又有分為單向Singly linked list 和雙向Doubly linked list 在這篇文章,會從最基礎的Singly linked list開始講起。 定義
Thumbnail
給定一個輸入陣列,每一個tuple代表節點之間了從屬關係。 請從從屬關係重建整顆二元樹,並且返回整顆二元樹的根結點。
Thumbnail
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 直線排列Permutations 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所有可能的情況,遞迴展開所有分
Thumbnail
題目敘述 題目給定一個鏈結串列中的節點Node,要求我們從鏈結串列中刪除該節點。 題目保證該節點不是tail node。 題目要求我們in-place原位操作。 原本的英文題目敘述 測試範例 Example 1: Input: head = [4,5,1,9], node = 5
Thumbnail
題目敘述 輸入給定一個鏈結串列的head node。 要求我們進行化簡,只要某個節點的右手邊存在比較大的節點,就刪除掉。 例如 5->2->13->3 5的右手邊有13,所以5刪除掉。 2的右手邊有13,所以2刪除掉。 13的右手邊沒有更大的節點,所以13留著。 3的右手邊沒有更大
Thumbnail
這篇文章,會帶著大家複習以前學過的遞回框架, 並且鏈結串列的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 遞回框架 尋找共通模式(common pattern),對應到演算法的General case 確立初始條件(initial conditio
Thumbnail
題目敘述 題目會給定一個鏈結串列 Linked List的頭部結點,要求我們根據索引的奇偶數重新排列。奇數索引的在前,偶數索引的在後。數的時候,從Head節點的索引=1開始數。 例如: 1 -> 2 -> 3 -> 4 -> 5 重新排列為 1 -> 3 -> 5 -> 2 -> 4
Thumbnail
題目敘述 題目會給我們一個鏈結串列的頭部結點Head node,要求我們計算鏈結串列中的Twin sum最大值是多少? 註: Twin Sum的定義就是頭尾結點相對位置相同的,互相配對加總在一起的值。 例如 給定串列= 1 -> 3 -> 2 -> 5 -> 100 -> 8 1, 8 一組
Thumbnail
題目敘述 題目會給定我們一條鏈結串列Linked list的起始節點,要求我們刪除Linked List正中央的節點。 註: 正中央的節點,題目定義為索引為floor( 串列長度 / 2 ) 的節點,索引從零(Head Node)出發開始數。 例如 1 -> 2 -> 3 -> 4 鏈結
Thumbnail
題目敘述 題目會給我們一顆二元樹的根結點,請我們列出每一層最右邊的節點值,以陣列的形式返回答案。 題目的原文敘述 測試範例 Example 1: Input: root = [1,2,3,null,5,null,4] Output: [1,3,4] 每一層最右邊的節點值分別是1, 3,
Thumbnail
在創作的路上真的很多人問我說 到底要怎麼做出符合自己期待 但又可以表現得很有美感的作品?🥹 這個問題真的應該是每個創作者都一直在學習的課題吧!
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
在資料結構與演算法裡, 最簡單的線性資料結構除了list之外就是linked list鏈結串列了。 Linked list又有分為單向Singly linked list 和雙向Doubly linked list 在這篇文章,會從最基礎的Singly linked list開始講起。 定義
Thumbnail
給定一個輸入陣列,每一個tuple代表節點之間了從屬關係。 請從從屬關係重建整顆二元樹,並且返回整顆二元樹的根結點。
Thumbnail
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 直線排列Permutations 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所有可能的情況,遞迴展開所有分
Thumbnail
題目敘述 題目給定一個鏈結串列中的節點Node,要求我們從鏈結串列中刪除該節點。 題目保證該節點不是tail node。 題目要求我們in-place原位操作。 原本的英文題目敘述 測試範例 Example 1: Input: head = [4,5,1,9], node = 5
Thumbnail
題目敘述 輸入給定一個鏈結串列的head node。 要求我們進行化簡,只要某個節點的右手邊存在比較大的節點,就刪除掉。 例如 5->2->13->3 5的右手邊有13,所以5刪除掉。 2的右手邊有13,所以2刪除掉。 13的右手邊沒有更大的節點,所以13留著。 3的右手邊沒有更大
Thumbnail
這篇文章,會帶著大家複習以前學過的遞回框架, 並且鏈結串列的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 遞回框架 尋找共通模式(common pattern),對應到演算法的General case 確立初始條件(initial conditio
Thumbnail
題目敘述 題目會給定一個鏈結串列 Linked List的頭部結點,要求我們根據索引的奇偶數重新排列。奇數索引的在前,偶數索引的在後。數的時候,從Head節點的索引=1開始數。 例如: 1 -> 2 -> 3 -> 4 -> 5 重新排列為 1 -> 3 -> 5 -> 2 -> 4
Thumbnail
題目敘述 題目會給我們一個鏈結串列的頭部結點Head node,要求我們計算鏈結串列中的Twin sum最大值是多少? 註: Twin Sum的定義就是頭尾結點相對位置相同的,互相配對加總在一起的值。 例如 給定串列= 1 -> 3 -> 2 -> 5 -> 100 -> 8 1, 8 一組
Thumbnail
題目敘述 題目會給定我們一條鏈結串列Linked list的起始節點,要求我們刪除Linked List正中央的節點。 註: 正中央的節點,題目定義為索引為floor( 串列長度 / 2 ) 的節點,索引從零(Head Node)出發開始數。 例如 1 -> 2 -> 3 -> 4 鏈結
Thumbnail
題目敘述 題目會給我們一顆二元樹的根結點,請我們列出每一層最右邊的節點值,以陣列的形式返回答案。 題目的原文敘述 測試範例 Example 1: Input: root = [1,2,3,null,5,null,4] Output: [1,3,4] 每一層最右邊的節點值分別是1, 3,