链表的定义
public class ListNode {
int val;
ListNode next;
public ListNode(int x) {
this.val = x;
this.next = null;
}
}
向链表中依次向后插入节点
public ListNode insertNode(ListNode head, int val) {
/**
* 插入节点
*/
if(head == null) { // 链表中没有节点,插入第一个节点
ListNode node = new ListNode(val);
head = node;
return head;
}
ListNode zhizhen = head;
while(head.next != null) { // 向链表中间插入一个节点
head = head.next;
}
ListNode node = new ListNode(val);
head.next = node;
return zhizhen;
}
获取链表中节点的个数
public int length(ListNode head) {
/**
* 获取链表中节点的个数
*/
int num = 0;
ListNode zhizhen = head;
while(zhizhen != null) {
num += 1;
zhizhen = zhizhen.next;
}
System.out.println("共有" + num);
return num;
}
从头结点开始遍历单链表
public static void traverse(ListNode head) {
/**
* 遍历链表中的所有节点
*/
ListNode zhizhen = head;
while(zhizhen != null) {
System.out.println("node->" + zhizhen.val);
zhizhen = zhizhen.next;
}
}
删除第一个遇到的节点
public ListNode deleteNode(ListNode head, int val) {
/**
* 删除节点
*/
ListNode temp = head;
if(head.val == val) { // 对应的节点是第一个节点
temp = head.next;
return temp;
}
while(head.next != null && head.next.val != val) {// 通过while循环,找到对应的节点
head = head.next;
}
if(head.next == null) { // 当遍历完所有节点时,没有找到对应的节点
System.out.println("链表中没有节点" + val);
return temp;
}else {
if(head.next.next != null) {
head.next = head.next.next;
}else { // 对应的节点是最后一个节点
head.next = null;
}
}
return temp;
}
在有序链表中,删除所有重复的元素,使得每个元素只出现一次
public ListNode deleteDuplicates(ListNode head) {
/**
* 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
*/
if(head == null) {
return head;
}
ListNode temp = head;
int num = head.val;
while(head.next != null) {
if (head.next.val == num) {
head.next = head.next.next;
}else {
head = head.next;
num = head.val;
}
}
return temp;
}
将单链表中的节点反转
public ListNode reverseList(ListNode head) {
/**
* 反转一个单链表。
*/
if(head == null) {
return head;
}
ListNode temp = null;
while(head != null) {
if (temp == null) {
temp = new ListNode(head.val);
}else {
ListNode s = new ListNode(head.val);
s.next = temp;
temp = s;
}
head = head.next;
}
return temp;
}
Java中关于树的操作