给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
1. 输入:head = [1,2,3,4,5] 2. 输出:[5,4,3,2,1]
public ListNode reverseList(ListNode head) { ListNode p=new ListNode(); while (head!=null) { ListNode q=head.next; head.next=p.next; p.next=head; head=q; } return p.next; }
ListNode p=new ListNode(); ListNode q=p; public ListNode reverseList(ListNode head) { if(head==null) return head; if(head.next!=null) reverseList(head.next); head.next=q.next; q.next=head; q=head; return p.next; } }
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
1. 输入:head = [1,2,6,3,4,5,6], val = 6 2. 输出:[1,2,3,4,5]
public ListNode removeElements(ListNode head, int val) { ListNode listNode=new ListNode(); listNode.next=head; ListNode p=listNode; while (listNode.next!=null) { if(listNode.next.val==val) { listNode.next=listNode.next.next; } else listNode=listNode.next; } return p.next; }
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)
1. 输入:head = [1,2,3,4] 2. 输出:[2,1,4,3]
public ListNode swapPairs(ListNode head) { if(head==null||head.next==null) return head; ListNode p=new ListNode(); p.next=head; ListNode q=p; while (head.next!=null){ ListNode temp=head.next; head.next=temp.next; temp.next=head; p.next=temp; p=head; head=p.next; } return q.next; }
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]
public ListNode removeNthFromEnd(ListNode head, int n) { int sum=0,k=0; ListNode head1=head; while (head1!=null){ head1=head1.next; sum++; } ListNode p=new ListNode(); p.next=head; ListNode q=p; int r = sum - n+1; while (p.next!=null){ k++; if(k==r){ p.next=p.next.next; } else p=p.next; } return q.next; }