707 设计链表
难点不是各个函数的实现,而是全局如何定义,以及要自己写ListNode的初始化,以前都是编辑器写好的,真的要自己写的时候还是需要注意一下。
全局需要一个空的哨兵头节点和size
class MyLinkedList {
// -49
int size;
ListNode head;
public MyLinkedList() {
size = 0;
head = new ListNode(0);//是一个前的空节点,head的next才是真正的头
}
public int get(int index) {
if(index<0||index>=size) return -1;
ListNode cur = head;
for(int i = 0;i<=index; i++){
cur = cur.next;
}
return cur.val;
}
public void addAtHead(int val) {
ListNode newh = new ListNode(val);
newh.next = head.next;
head.next = newh;
size++;
}
public void addAtTail(int val) {
ListNode cur = head;
for(int i=0;i<size;i++){
cur = cur.next;
}
cur.next = new ListNode(val);
size++;
}
public void addAtIndex(int index, int val) {
ListNode pre = head;
if(index>size) return;
else if(index<0){
addAtHead(val);
return;
}
for(int i=0;i<index;i++){
pre = pre.next;
}
ListNode node = new ListNode(val);
node.next = pre.next;
pre.next = node;
size++;
}
public void deleteAtIndex(int index) {
ListNode pre = head;
if(index<0||index>=size) return;
for(int i=0;i<index;i++){
pre = pre.next;
}
pre.next = pre.next.next;
size--;
}
}
class ListNode{
int val;
ListNode next;
ListNode(int val){
this.val = val;
}
}
/**
* Your MyLinkedList object will be instantiated and called as such:
* MyLinkedList obj = new MyLinkedList();
* int param_1 = obj.get(index);
* obj.addAtHead(val);
* obj.addAtTail(val);
* obj.addAtIndex(index,val);
* obj.deleteAtIndex(index);
*/
24 亮亮交换链表中的节点
一开始没有认真审题,直接交换链表的节点值而不是交换链表节点,就写得非常简单,后来发现题目明确写了不能这样做
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
//16-21
ListNode cur = head;
while(cur!=null&&cur.next!=null){
int tmp = cur.val;
cur.val = cur.next.val;
cur.next.val = tmp;
cur = cur.next.next;
}
return head;
}
}
交换节点的话画一下图也是挺快的
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
//-37
ListNode cur = head;
ListNode node = new ListNode(0),pre = node;
node.next = head;
while(cur!=null&&cur.next!=null){
ListNode tmp = cur.next.next;
pre.next = cur.next;
cur.next.next = cur;
cur.next = tmp;
pre = cur;
cur = tmp;
}
return node.next;
}
}