public bool IsPalindrome(ListNode head) {
prev = new ListNode(head.val, null);
while(current.next != null){
next = new ListNode(current.next.val, prev);
var tailN = reversedHead;
if(headN != null && tailN != null)
if(headN == null || tailN != null || headN.val != tailN.val)
private ListNode _head = null;
private ListNode _tail = null;
public ListNode DetectCycle()
if (_head == null || _head.next == null)
while (fast.next != null && fast.next.next != null)
public int Get(int index)
var node = GetNodeAt(index);
return node == null ? -1 : node.val;
public void AddAtHead(int val)
var node = new ListNode(val);
public void AddAtTail(int val)
var node = new ListNode(val);
Console.Write($"{temp.val}, ");
public void LinkTailTo(int index)
var n = GetNodeAt(index);
public void AddAtIndex(int index, int val)
if (index < 0 || index > _count)
var node = new ListNode(val);
var prev = GetNodeAt(index - 1);
public void DeleteAtIndex(int index)
if (_head == null || index < 0 || index > _count - 1)
var prev = GetNodeAt(index - 1);
prev.next = prev.next.next;
private ListNode GetNodeAt(int index)
while (temp != null && i < index)
public ListNode next { get; set; }
public ListNode(int value, ListNode next = null)
public override string ToString()