1、题目:反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode newNode = null;
ListNode pre = head;
while(pre != null){
ListNode next = pre.next;
pre.next = newNode;
newNode = pre;
pre = next;
}
return newNode;
// if(head == null || head.next == null){
// return head;
// }
// ListNode newHead = reverseList(head.next);
// head.next.next = head;
// head.next = null;
// return newHead;
}
}
2.题目:K个一组反转链表
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]
示例 2:
输入:head = [1,2,3,4,5], k = 3
输出:[3,2,1,4,5]
示例 3:
输入:head = [1,2,3,4,5], k = 1
输出:[1,2,3,4,5]
示例 4:
输入:head = [1], k = 1
输出:[1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
// 保存头节点
ListNode cur = head;
int count = 0;
// 循环 看是否有 k个一组
while(cur != null && count != k){
cur = cur.next();
count++;
}
//够一组
if(count == k){
//递归 知道最后不足一组时,从后向前反转
cur = reverseKGroup(cur,k);
// 开始反转
while(count != 0){
count--;
ListNode temp = head.next();
head.next = cur;
cur = head;
head = temp;
}
// 更新头节点
head = cur;
}
// 不够一组直接返回头节点
return head;
}