1. 几个常见的链表操作
需要把这几个操作都能写熟练,不熟就多写几遍,我保证你之后再也不会害怕写链表代码。
- 单链表反转
- 链表中环的检测
- 两个有序的链表合并
- 删除链表倒数第 n 个结点
- 求链表的中间结点
2.单链表反转
题目描述
反转一个单链表。
示例
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
思路分析
1)根据题目给出的输入示例,构造出下的链表结构。
2)然后定义虚拟结点prev,其数据域值为NULL。定义变量cur指向链表中的头结点。
3)接着,开始遍历链表,对于变量cur所指向的下一个结点,我们用变量nextNode表示。
4)再接着,将变量cur所指向的结点的后继指针指向虚拟结点prev,即cur.next=prev。
5)之后,将变量prev指向当前考察的结点,即prev=cur。
6)最后,将变量cur指向nextNode,即下一个待考察的结点。这时,就将变量prev指向的结点反转过来了。
7)对于剩余未考察的结点,重复上述步骤即可将链表反转。
3.示例代码
public ListNode reverseList(ListNode head)
{
ListNode prev = null;
ListNode cur = head;
while (cur != null)
{
ListNode nextNode = cur.next;
cur.next = prev;
prev = cur;
cur = nextNode;
}
return prev;
}
点击 动画演示反转链表