排序和字符串查找
1.链表排序
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。
应该保留两部分内链表节点原有的相对顺序. 双指针方法,用两个指针将两个部分分别串起来。最后在将两个部分拼接起来。
left指针用来串起来所有小于x的结点,
right指针用来串起来所有大于等于x的结点。
得到两个链表,一个是小于x的,一个是大于等于x的,做一个拼接即可
ListNode定义
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public class num3 {
public ListNode a1(ListNode head, int x) {
if (head == null) {
return null;
}
ListNode lefta1 = new ListNode(0);
ListNode righta1 = new ListNode(0);
ListNode left = lefta1, right = righta1;
while (head != null) {
if (head.val < x) {
left.next = head;
left = head;
}else{
right.next = head;
right = head;
}
head = head.next;
}
right.next = null;
left.next = rightDummy.next;
return leftDummy.next;
}
}
2.字符串查找
对于一个给定的 source 字符串和一个 target 字符串,应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1
class Solution {
public int a2(String source, String target) {
if (source == null || target == null) {
return -1;
}
for (int i = 0; i < source.length() - target.length() + 1; i++) {
int j = 0;
for (j = 0; j < target.length(); j++) {
if (source.charAt(i + j) != target.charAt(j)) {
break;
}
}
// 循环后,可查找目标
if (j == target.length()) {
return i;
}
} return -1;
}
}