Each node has a value and a link to next node. (singly)
基本操作:
1. Create a Linked List
class Node {
Node next = null;
int data;
public Node(int d) {
data = d;
}
void appendToTail(int d) {
Node end = new Node(d);
Node n = this;
while (n.next != null) { n = n.next; }
n.next = end;
}
}
2. Deleting a Node from Singly Linked List
1) Delete a node, given head node and the value of the node to be deleted. (singly)
Node deleteNode(Node head, int d) {
Node n = head;
if (n.data == d) {
return head.next;
}
while (n.next != null) {
if (n.next.data == d) {
n.next = n.next.next;
return head; //head not change
}
n = n.next;
}
return head; //return head if d is not in the list
}
2) Delete a node from the middle, only access to that node. (Leetcode)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public void deleteNode(ListNode node) {
if (node == null || node.next == null) return;
node.val = node.next.val;
node.next = node.next.next;
node = node.next;
}
}
3. Reverse a singly linked list
1) Recursive
public class Solution {
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) return head;
ListNode second = head.next;
head.next = null;
ListNode node = reverseList(second);
second.next = head;
return node;
}
}
2) Iterative
public class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode temp = curr.next;
curr.next = prev;
prev = curr;
curr = temp;
}
return prev;
}
}
实际应用:
No comments:
Post a Comment