CShap 链表的中间节点 源代码
时间: 2024-03-13 13:18:38 浏览: 57
以下是C#中链表的中间节点的源代码示例:
```
public ListNode MiddleNode(ListNode head) {
ListNode slow = head;
ListNode fast = head;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
```
这个函数中,我们使用了两个指针slow和fast,其中slow指向链表的头部,fast也指向链表的头部。我们在while循环中使用了一个条件,即fast不为null并且fast的下一个节点也不为null。这是因为如果fast为null或fast的下一个节点为null,那么它就不可能再向前移动了。
在循环中,我们使用slow指针每次移动一个节点,而使用fast指针每次移动两个节点。这样,当fast指针到达链表的末尾时,slow指针就会指向链表的中间节点。最后,我们返回slow指针所指向的节点作为结果。
相关问题
CShap 链表交换指针交换链表的节点 源代码
下面是C#语言中交换两个链表节点的代码示例:
```
public class ListNode
{
public int val;
public ListNode next;
public ListNode(int x) { val = x; }
}
public class Solution
{
public ListNode SwapNodes(ListNode head, int k)
{
if (head == null) return null;
int len = 0;
ListNode cur = head;
while (cur != null)
{
len++;
cur = cur.next;
}
ListNode node1 = null, node2 = null;
cur = head;
int count = 1;
while (cur != null)
{
if (count == k) node1 = cur;
if (count == len - k + 1) node2 = cur;
count++;
cur = cur.next;
}
int temp = node1.val;
node1.val = node2.val;
node2.val = temp;
return head;
}
}
```
上述代码中,我们定义了一个`ListNode`类,表示链表节点。其中,`val`字段表示该节点的值,`next`字段表示该节点的后继节点。
接着,我们定义了一个`Solution`类,其中包含一个`SwapNodes`方法,用于交换链表中第`k`个节点和倒数第`k`个节点。该方法接收两个参数:`head`表示链表的头节点,`k`表示要交换的节点位置。
在`SwapNodes`方法内部,我们首先计算出链表的长度`len`。接着,我们分别用`node1`和`node2`表示待交换的两个节点。具体来说,我们遍历链表,当遍历到第`k`个节点时,将其赋值给`node1`;当遍历到倒数第`k`个节点时,将其赋值给`node2`。
最后,我们交换`node1`和`node2`的值,并返回链表的头节点`head`。
CShap 链表指针删除链表节点 源代码
以下是C#中删除链表节点的示例代码:
```csharp
public class ListNode {
public int val;
public ListNode next;
public ListNode(int val=0, ListNode next=null) {
this.val = val;
this.next = next;
}
}
public class Solution {
public ListNode DeleteNode(ListNode head, int val) {
// 如果要删除的节点是头节点,则直接返回头节点的下一个节点
if (head.val == val) {
return head.next;
}
// 找到要删除的节点的前一个节点
ListNode prev = head;
while (prev.next != null && prev.next.val != val) {
prev = prev.next;
}
// 如果找到了要删除的节点,则将前一个节点的next指向要删除的节点的下一个节点
if (prev.next != null) {
prev.next = prev.next.next;
}
return head;
}
}
```
在这个示例中,我们定义了一个`ListNode`类来表示链表节点,并在`Solution`类中定义了一个`DeleteNode`方法来删除链表中的节点。
在`DeleteNode`方法中,我们首先判断要删除的节点是否是头节点。如果是,我们直接返回头节点的下一个节点。
否则,我们遍历链表找到要删除的节点的前一个节点。如果找到了,我们将前一个节点的`next`指向要删除的节点的下一个节点,从而删除了要删除的节点。
最后,我们返回头节点。
阅读全文