交换链表中的节点
题目:
给你链表的头节点 head 和一个整数 k 。交换 链表正数第 k 个节点和倒数第 k 个节点的值后,返回链表的头节点(链表 从 1 开始索引)。示例如下(直接截图):
思路:要交换两个节点,就得找个需要交换两个节点的前一个节点和后一个节点,对于两种特殊情况需要特殊说明,(1)第K个节点的下一个节点就是倒数第K个节点(2)倒数第k个节点的后一个节点是第k个节点
Java代码:
class Solution {
public ListNode swapNodes(ListNode head, int k) {
ListNode cur = head;
int length = 0;
while(cur!=null){
length++;
cur = cur.next;
}
if(head==null || head.next==null || k <0 || k>length){
return head;
}
ListNode pre = new ListNode(0,head);
cur = pre;
int n = length-k+1;
ListNode pre1 = new ListNode(0);
ListNode cur1 = new ListNode(0);
ListNode pre2 = new ListNode(0);
ListNode cur2 = new ListNode(0);
int m = 0;
while(cur!=null){
m++;
if(m==k) {
pre1 = cur;
cur1 = cur.next;
}
if(m==n){
pre2=cur;
cur2 = cur.next;
}
cur = cur.next;
}
if(cur1.next == cur2 ){
cur1.next = cur2.next;
cur2.next = cur1;
pre1.next = cur2;
}else if(cur2.next == cur1){
cur2.next = cur1.next;
cur1.next = cur2;
pre2.next = cur1;
}
else{
ListNode temp = cur2.next;
pre1.next = cur2;
cur2.next = cur1.next;
cur1.next = temp;
pre2.next = cur1;
}
return pre.next;
}
}
仅分享自己的思路,本人小白思路比较简单,希望各位大神能提供更优解!!