19.删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode p = head;
int len= 0;
while(p != null){
p = p.next;
len++; //获取链表长度
}
if(len < n) return null;
else if(len==n) return head.next;
else{
ListNode p1 = head;
ListNode p2 = head;
for(int i=0;i<n;i++){ //前指针先向前走n
p1 = p1.next;
}
while(p1.next != null){ //二者同时走
p1 = p1.next;
p2 = p2.next;
}
p2.next = p2.next.next;
return head;
}
}
}
22.括号生成
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
class Solution {
public List<String> generateParenthesis(int n) {
LinkedList<LinkedList<String>> result = new LinkedList<LinkedList<String>>();
if (n == 0)
return result.get(0);
LinkedList<String> list0 = new LinkedList<String>();
list0.add("");
result.add(list0);
LinkedList<String> list1 = new LinkedList<String>();
list1.add("()");
result.add(list1);
for (int i = 2; i <= n; i++) {
LinkedList<String> temp = new LinkedList<String>();
for (int j = 0; j < i; j++) {
List<String> str1 = result.get(j);
List<String> str2 = result.get(i - 1 - j);
for (String s1 : str1) {
for (String s2 : str2) {
String el = "(" + s1 + ")" + s2;
temp.add(el);
}
}
}
result.add(temp);
}
return result.get(n);
}
}
31.下一个排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
class Solution {
public void nextPermutation(int[] nums) {
int i;
for (i=nums.length-1; i>0; --i) {
if (nums[i-1] < nums[i]) break;
}
int j;
if (i != 0) {
for (j = i; j < nums.length; ++j) {
if (nums[j] <= nums[i - 1]) break;
}
int t = nums[i - 1];
nums[i - 1] = nums[j - 1];
nums[j - 1] = t;
}
int t;
j = nums.length - 1;
while (i<j) {
t = nums[j];
nums[j] = nums[i];
nums[i] = t;
++i;
--j;
}
}
}