链表是线性表的一种表示形式,和线性表的另一种表达形式——数组不同。在链表中,没有固定长度的设定,表中节点是彼此相连的,表中的每一个节点链接下一个节点(即后继),链表头(Head)指向链表的第一个节点。所以,要想找到某一节点的位置,只需要确定它的上一结点的位置即可。这种性质使得链表的创建与插入变得相当灵活。
链表的创建有两种方法:头插法 和 尾插法
1.头插法: 在链表的开头插入一个新的节点,也就是,必须使得链表头Head指向新节点,该新节点指向原来是表头的第一个节点。下图为头插法的具体情况:每个新节点都插在了原来第一个节点的前面。而有这种方法新建的链表是后来居前的,也就是链表是逆序的
插入步骤:
Node newNode; //生成新节点newNode
Node curr --> head.next ;
newNode.--> curr; //新节点指向原来的第一节点
head --> newNode;//头部指向新节点
2.尾插法:在链表的尾部插入一个节点。尾插法是比较容易理解并令大家习惯的插入形式,生成一个新节点后直接插入链表的微端,也就是让原来最后一个节点指向该新节点。这也是链表长度增长的一种最基本的方式。后来局后,生成的链表是顺序的。
插入步骤:
Node newNode; // 生成新节点newNode
prev --> newNode; // 尾部指向新节点
应用举例:
Java 实现一个链表的逆序表达输出
链接:https://www.nowcoder.com/questionTerminal/75e878df47f24fdc9dc3e400ec6058ca
来源:牛客网
/**
链表节点类的定义
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head)
{
if(head == nulll)
{
return head; //如果链表为空,返回NULL
}
ListNode pre = null; //分成两部分,pre 为已经逆序的部分,pro是还没有逆序的部分
ListNode pro = null;
while(head != null) //如果链表不为空,则进入循环,遍历每一个节点
{
pos = head.next; //将head.next放入没有逆序的部分pro,为该部分第一个节点
head.next = pre; //将head指向已经逆序的部分pre
pre = head; //head为逆序部分的第一个节点
head = pos; //循环指向没有逆序的部分的头部
}
return pre; //返回全部逆序好的新链表
}
2494

被折叠的 条评论
为什么被折叠?



