leetcode 链表技巧总结
程序员文章站
2024-01-29 14:16:58
...
**
1、 链表的逆转
**
1->2->3->4 4->3->2->1
public ListNode reverseList(ListNode head){
if(head==null||head.next==null) return head;
ListNode newHead=reverseList(head.next);
head.next.next=head;
head.next=null;
return newHead;
}
采用递归一把梭穿到最后找到逆转后的头节点,然后从后往前挨个儿逆转,即后边节点指向前边节点,前边节点接着null,顺序往前,直到完成整个逆转过程
2、快慢指针定中点
ListNode slow=head;
ListNode fast=head;
while(fast.next!=null&&fast.next.next!=null){
slow=slow.next;
fast=fast.next.next;
}
如果链表节点个数是奇数,slow最后位置就是中点
如果链表节点个数是偶数,slow最后位置就是中间两个节点中较小的那个
所以如果拆分链表,记得slow.next=null
上一篇: 上传文件到百度网盘