链表相关
203. 移除链表元素
思路
如果头结点就有要移除的元素则先遍历全部移除,然后将要移除的元素进行跳过
个人题解
class Solution {
public ListNode removeElements(ListNode head, int val) {
while (head != null && head.val == val) {
head = head.next;
}
ListNode cur = head;
while (cur != null) {
while(cur.next!=null && cur.next.val == val){
cur.next = cur.next.next;
}
cur = cur.next;
}
return head;
}
}
707. 设计链表
个人题解
class MyLinkedList {
int size;
ListNode head;
public MyLinkedList() {
size = 0;
head = new ListNode(0);
}
public int get(int index) {
if (index < 0 && index >= size) {
return -1;
}
ListNode temp = head;
for (int i = 0; i <= index; i++) {
temp = temp.next;
}
return temp.val;
}
public void addAtHead(int val) {
addAtIndex(0, val);
}
public void addAtTail(int val) {
addAtIndex(size, val);
}
public void addAtIndex(int index, int val) {
if (index > size) {
return;
}
if (index < 0) {
index = 0;
}
size++;
ListNode temp = head;
for (int i = 0; i < index; i++) {
temp = temp.next;
}
ListNode listNode = new ListNode(val);
listNode.next = temp.next;
temp.next = listNode;
}
public void deleteAtIndex(int index) {
if (index < 0 || index >= size) {
return;
}
size--;
if (index == 0) {
head = head.next;
return;
}
ListNode temp = head;
for (int i = 0; i < index; i++) {
temp = temp.next;
}
temp.next = temp.next.next;
}
}
注意问题
- 对于判断中的条件要定义好
- 判断条件要覆盖全部可能
206.反转链表
思路
通过双指针的方法将当前节点指向前一节点然后把当前节点向后依次遍历解题。
个人题解
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
while (cur != null) {
ListNode temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
}